Verstappen fought his way to second after a five-place grid penalty and took the point for fastest lap.
The win cuts the deficit to Verstappen to eight points with two races to go in Saudi Arabia and Abu Dhabi next month.
Alpine's Fernando Alonso took a superb third, his first podium since the 2014 Hungarian Grand Prix.
Spaniard Alonso, 40, had been trying to hold off a late charge from Red Bull's Sergio Perez, but a late virtual safety car put the place beyond doubt.
Earlier, Perez had been poised for a close fight for third with the second Mercedes of Valtteri Bottas until the Finn suffered a puncture just after half distance.
And three further punctures created extra tension in the closing laps.
Verstappen made up several places on the first lap
How did Hamilton win?
After another weekend of controversy and ill temper between the two title-contending teams, it was one of Hamilton's easiest wins of the season, and the seven-time champion appeared to have the pace to have triumphed whether Verstappen had been penalised or not.
The Dutchman was found to have not seen a double waved yellow flag at the end of qualifying, and although Red Bull pleaded mitigating factors - that the cockpit and trackside light-warning system had been turned off - officials said they had no choice but to punish him.
Red Bull team principal Christian Horner was even given an official warning by race stewards for claiming a "rogue marshal" had confused matters. He later apologised.
The penalty dropped Verstappen to seventh on the grid, but he was fourth by the end of the first lap and second after five.
By that point, the Red Bull was only 3.7 seconds behind Hamilton but the Mercedes driver continued to stretch ahead until his lead was 8.2secs by the time Verstappen made his first pit stop on lap 17.
The Briton followed him in the next time around to secure his position and the pattern of the race was set.
They stopped a lap apart again on laps 41 and 42 and the only matter still in dispute was the point for fastest lap.
Verstappen already had it before making a late pit stop for soft tyres to make absolutely sure.
Several famous ex-footballers attended, including former England captain David Beckham
A carnival of punctures and tension
Bottas also had a grid penalty - his just three places because it was only a single yellow flag he ignored - but while Verstappen made progress on lap one, Bottas went backwards and was down in 11th at the end of it.
He made little progress in the opening laps before being given a hurry-up from team boss Toto Wolff, who told him he "must" pass the cars in front.
The race between him and Perez was on target to climax in the closing laps, the Mexican making his first stop early and Bottas trying to run long to have a tyre advantage in the closing laps.
But the puncture on lap 31 ended his hopes and in the end the Finn did not even finish the race, Mercedes having to retire the car with 10 laps to go.
Perez still faced a fight for third, though, from Alonso, superb in the Alpine after starting third on the grid following the penalties to Verstappen and Bottas.
Red Bull pitted Perez for a second stop at the same time as Verstappen, with 16 laps to go, and left him to recover positions past Lance Stroll's Aston Martin and Esteban Ocon's Alpine - McLaren's Lando Norris had been ahead of both but felt a puncture and pitted.
Perez was 11.1secs behind Alonso with six laps to go and closing, and there was huge tension as Alonso was running on old tyres and both Williams drivers, George Russell and Nicholas Latifi, had also suffered punctures and Alonso needed to do the same number of laps as they had when their tyres failed to make the end of the race.
A virtual safety car with two laps to go gave Alonso's tyres an extra breather and also neutralised the gap and the Spaniard, who returned to the sport after two years away, scored his first podium since the 2014 Hungarian Grand Prix.
Perez took fourth ahead of the second Alpine of Esteban Ocon, Lance Stroll's Aston Martin and the Ferraris of Carlos Sainz and Charles Leclerc.
Norris and Aston Martin's Sebastian Vettel completed the points scorers in the top 10.
Driver of the day
Has to be Alonso. A superb fifth in qualifying, comfortably clear of team-mate Ocon, second on the first lap, and then a carefully managed race to bring the Alpine home in third on one stop. Red Bull helped him out by stopping Perez a second time, but a first podium in seven years was well deserved.
What happens next?
A welcome break after three race weekends in a row, before a double-header climax - a new circuit in Saudi Arabia and then a much-changed Yas Marina in Abu Dhabi.
Hamilton and Mercedes look strong, but Verstappen has the points gap. A decider at the final race would be the popular outcome and it looks to be heading that way.
Lewis Hamilton wore a rainbow helmet design to help promote inclusivityFifa president Gianni Infantino, left, came to the race to help promote next year's football World Cup, set to be held in Qatar, alongside F1 boss Stefano Domenicali and FIA president Jean Todt, right