The result gives Mercedes an unassailable lead in the constructors' championship, effectively securing them a third straight crown.
Sebastian Vettel was Ferrari’s lead runner on a frustrating afternoon for the Scuderia, the German taking fourth place ahead of team mate Kimi Raikkonen. Also disappointed was Red Bull’s Daniel Ricciardo in sixth, the Australian having started the race in front of both the scarlet cars.
The Force Indias of Sergio Perez and Nico Hulkenberg were seventh and eighth, beating arch rivals Williams, who saw Felipe Massa and Valtteri Bottas complete the top ten, as all 22 drivers finished the race.
Polesitter Rosberg effectively had things won the moment Hamilton made a mistake and lagged so badly at the start that he plunged from second to eighth place.
Thereafter, the German drove a controlled race well out in front to win for the first time here and score his ninth victory of a season that looks increasingly like going his way, comfortably clear of Verstappen’s Red Bull and the recovered Hamilton.
As Rosberg quickly eased away at the start, Verstappen jumped to second but Ricciardo in the second Red Bull lost momentum diving past the tardy Hamilton and was overtaken by Perez’s Force India and fast-starting Vettel’s Ferrari. Further back, Hulkenberg took sixth ahead of Raikkonen, who got a late five-place grid drop because of a gearbox change, and Hamilton.
Vettel made swift work of deposing Perez, and Raikkonen passed the other Force India on the sixth lap, Hamilton on the seventh. But the really key moment for the reigning world champion came with his first pit stop on the 13th lap; he jumped past both Raikkonen and Perez as they were held up trying to pass Jolyon Palmer’s Renault.
That freed the Englishman to chase after Rosberg, Verstappen and Vettel, and he steadily cut down the Ferrari driver’s advantage, from 12.9s on lap 26 to 4.2 when he pitted for the second time on the 33rd lap. Ferrari immediately brought Vettel in on lap 34, but the Mercedes got the undercut to claim the final podium slot.
It was a bad-tempered race as far as traffic was concerned, with Verstappen, Vettel and Raikkonen in particular complaining bitterly about their perceived lack of blue flags, or else drivers ignoring them. As Rosberg controlled things without taking much out of his detuned engine, Hamilton moved ever closer to the Red Bull in second place. But Verstappen had better traction out of the chicane and stayed ahead.
At the end of the penultimate lap, 52, Hamilton had a look down the inside going into the chicane, but had to pull left dramatically - and veer down the escape road - as Verstappen jinked right to slam the door. Mercedes initially protested the Dutchman's tactics, but with Hamilton himself saying he did not wish to force the matter, the complaint was withdrawn.
The Dutchman, who earned the fans' Driver of the Day nod, eventually claimed second, 4.9s behind Rosberg, and 0.7s ahead of Hamilton.
Rosberg now has 313 points to his team mate’s 280, meaning he needs only three seconds and a third to clinch his first title over the remaining four races - even if Hamilton wins all of them.
Vettel and Ferrari gambled on fitting a set of soft Pirelli tyres for his final stint as all the other leaders went for another set of hards, and the yellow tyres soon faded, leaving the German 14.4s seconds behind the second Mercedes but well ahead of Raikkonen’s sister car. Ricciardo drove a very subdued race to sixth, as Perez led Hulkenberg home on another strong day for Force India.
The final points went to the battling Williams drivers Felipe Massa and Valtteri Bottas, who were separated by 0.5s at the flag and were only 0.9s ahead of Romain Grosjean’s Haas.
Palmer took 12th, from Toro Rosso’s Daniil Kvyat, Renault team mate Kevin Magnussen and Sauber’s Marcus Ericsson, as McLaren’s Fernando Alonso and Toro Rosso’s Carlos Sainz battled throughout to finish 0.8s apart.
Jenson Button, who started from the back after changing Honda engine components on his McLaren, took 18th ahead of Sauber’s Felipe Nasr, Haas’ Esteban Gutierrez - who spun in the chicane while fighting Sainz early on - and Esteban Ocon who comfortably beat Manor team mate Pascal Wehrlein.