The Brit was unheaded during the 70 lap race, and cut Sebastian Vettel's lead in the standings to just eight points, after the German fought back to fourth late on.
Valtteri Bottas was second and Daniel Ricciardo third for the third time in a row, but all the action was based around the two Force India's of Sergio Perez and Esteban Ocon, who finished fifth and sixth.
Ocon felt he was quicker and should've been allowed to pass Perez to have a go on Ricciardo for third, as the two-stopping Ferrari duo began to make inroads into the deficit.
Kimi Raikkonen fell back late on with brake-by-wire issues but still came home seventh, ahead of the Renault of Nico Hulkenberg.
Having started 17th, Lance Stroll had a confidence boosting race, and hauled the first points in his career at home, ahead of Romain Grosjean in 10th, who capitalised on a late engine failure for Fernando Alonso.
Verstappen charge halted
At lights out, Max Verstappen made a lightning get-away from fifth to vault into second, clipping Vettel's front-wing as he went around the outside of the Ferrari.
However, before the field could settle, there was a safety car deployed after Carlos Sainz made contact with Grosjean, spinning the Toro Rosso around and collected Felipe Massa's slow-starting Williams, causing both to retire.
After five laps behind the safety car, racing got underway again, but immediately, Vettel's damaged front-wing broke, and he was forced to pit on the next lap, as Ferrari risked more damage to the car.
At the start of the second lap of green-flag racing, Verstappen's Red Bull conked out exiting Turn 2, and put the Dutchman out.
After the Virtual Safety Car had gone in, Hamilton eased off into the distance and was rarely seen thereafter as the battle raged behind him.
Battle for the podium
Raikkonen made a poor start from fourth and was jumped by Perez, and soon after the VSC ended, Ferrari tried to undercut the Mexican by coming in first for a set of super-soft tyres, with Red Bull responding by boxing Ricciardo on the next lap, for the hardest soft compound tyre.
The net result of the stops was that Ocon, who hadn't stopped was in second, and was holding off Bottas for second, while Ricciardo. Perez and Raikkonen all tried to make inroads.
On Lap 32, Ocon finally pitted in and dropped behind those had had pitted, rejoining just behind Raikkonen.
The Frenchman then feltt he had the pace to try and make a move on Ricciardo, but team-mate Perez bluntly refused to play the team game. All this allowed Vettel, who had stormed through the field to catch and reel the squabbling pack in.
Ferrari then switched to a two stop strategy, and brought both Raikkonen and Vettel in, giving them fresh tyres for the final sprint to the chequer.
Ocon began to get irritated behind his team-mate, with the Force India allowing Perez the opportunity to pass through backmarkers, to no avail.
As Raikkonen re-caught the Force India's, he out-braked himself into the final chicane, suffering with brake-by-wire issues, and fell back to finish seventh.
Meanwhile, Vettel caught up to the Force India's, as Ricciardo had escaped and secured third, the fight centred on the battle for fourth.
With just three laps of the 70 remaining, Vettel dived up the inside of Perez at Turn 1, forcing Ocon, on the outside, wide onto the Turn 1 run-off and Vettel soon dispatched the Force India for fourth, minimising the damage to Hamilton to just a net 13 point loss.
It wasn't over however between Perez and Ocon, with the two fighting over the line, the Mexican just getting the advantage by 0.2 seconds.
Toro Rosso nightmare
After Sainz's smash, Toro Rosso's day went from bad to worse as Danill Kvyat was given a drive-through for not being in the correct positon on the formation lap after struggling to get away, and was then hit with a 10 second penalty, as the stewards felt he was given the wrong penalty in the first place. A calamitous pit-stop summed up his day.
Kevin Magnussen was hit with a five second penalty for overtaking Stoffel Vandoorne's McLaren under the early VSC, while Jolyon Palmer had his best race of the season, and came home 11th, just over a second behind Grosjean's Haas.
After not being on the pace all weekend, Sauber came home in 13th and 15th, with Marcus Ericsson getting the better of Pascal Wehrlein, who started from the pit-lane after his qualifying crash yesterday.
Fernando Alonso was all set to claim McLaren's first point of the season, but on the penaultimate lap, heading into the Turn 8/9 chicane, the Honda conked out, and the Spainaird retired yet again, as speculation intensifies that McLaren will ditch Honda and return to Merecedes power.
Kvyat, Verstappen, Massa and Sainz were the other non-finishers.
|3rd||Daniel Ricciardo||Red Bull||+35.297s||15|
|5th||Sergio Perez||Force India||+40.476s||10|
|6th||Esteban Ocon||Force India||+40.716s||8|
|9th||Lance Stroll||Williams||+ 1 lap||2|
|10th||Romain Grosjean||Haas||+ 1 lap||1|
|11th||Jolyon Palmer||Renault||+ 1 lap||0|
|12th||Kevin Magnussen||Haas||+ 1 lap||0|
|13th||Marcus Ericsson||Sauber||+ 1 lap||0|
|14th||Stoffel Vandoorne||McLaren||+ 1 lap||0|
|15th||Pascal Wehrlein||Sauber||+ 1 lap||0|
|DNF||Danill Kvyat||Toro Rosso||Wheel||0|
|DNF||Max Verstappen||Red Bull||Battery||0|
|DNF||Carlos Sainz Jr||Toro Rosso||Crash||0|