After recovering from his qualifying exclusion by charging from 20th to fifth place in the sprint race on Saturday, Hamilton dropped to P10 on the grid for the race due to an engine penalty.
But the Mercedes driver quickly fought his way up the field, moving into second place behind Verstappen on lap 19 before closing up through both rounds of pit stops.
Hamilton was forced wide by Verstappen at Turn 4 on lap 48 when he tried to overtake, but ultimately found a way past 11 laps later at the same corner as his car displayed a far superior straightline speed.
Hamilton eventually crossed the line more than 10 seconds clear of Verstappen, reducing the Red Bull driver's lead in the championship down to 14 points with three races remaining.
"Coming into this weekend, I never ever thought that we would be able to close the gap like we have today," Hamilton said after the race.
"And then these things, they just kept going against us. But I think it really shows, for everyone, just never give up whatever you're facing. You have just got to keep pushing, keep tumbling away, keep fighting, and never, never stop fighting.
"That's really how I approached this week and [took] inspiration from all around.
"But it feels like the first because I don't feel like I have had a win for a long time."

Max Verstappen, Red Bull Racing RB16B, battles with Lewis Hamilton, Mercedes W12
Photo by: Charles Coates / Motorsport Images
Hamilton was congratulated by Mercedes F1 chief Toto Wolff over team radio, with Wolff saying: "That is how you overcome a 20-place disqualification." Hamilton replied: "It was 25, but you're right."
Hamilton was joined on the podium by Mercedes teammate Valtteri Bottas, whose third-place finish helped Mercedes pull 11 points clear of Red Bull in the constructors' championship.
"The team did an amazing job, Valtteri did a great job today to get as many points as possible," Hamilton said.
"I was pushing. I was pushing as hard as I could. But from last on the grid and then another five-place penalty was I think the hardest weekend I've had.
"But my dad reminded me of 2004, when I was in Formula 3 in Bahrain, and I started last and I finished 10th, and I finished first. So this one is for my dad."
Verstappen said that Red Bull "tried everything we could" to beat Hamilton and Mercedes, calling it "a good battle".
"Of course in the end we just missed a little bit of pace," Verstappen said."But we gave it all today and it was a lot of fun.
"We still have a good points lead you know, so today was a bit of damage limitation on a weekend where it was a bit difficult for us.
"But I'm confident that the coming races we will bounce back."