Ferrari appeared to blow their best chance to challenge the Mercedes driver, delaying a pit stop for Sebastian Vettel long enough to lose their advantage over Hamilton's team-mate Valtteri Bottas and emerge behind the Finn.
It was a critical error that could have cost Vettel second place - but he fought back and passed Bottas with five laps to go.
Bottas misjudged an attempt to defend from Vettel, who passed on the outside on the run to Turn Two. Trying to keep the place from too far back, Bottas locked a wheel, slid onto the kerb, hit Vettel and damaged the Mercedes' front wing.
Vettel emerged unscathed and Bottas carried on, only to have another contact with Red Bull's Daniel Ricciardo when the Australian tried to pass around the outside at Turn One and Bottas locked up and slid into him.
Bottas' troubles allowed Kimi Raikkonen to come through into third place behind his Ferrari team-mate, while Ricciardo passed him on the last lap to take fourth.
Despite the late drama, the big picture is that Ferrari have now lost two races in a row that they might have won in different circumstances.
Hamilton's advantage with nine races to go is almost a race victory and puts him in a strong position for when the season re-starts in Belgium at the end of August.
Nearly four weeks off, until F1 reconvenes at the Belgian Grand Prix on the magnificent Spa-Francorchamps circuit, followed by the Italian Grand Prix at Monza a week later.
Have you got your F1 Merchandise at the ready? check out the full range below and support your rider this season
The sizes below are measured from arm pit to arm pit, to get UK sizes double the size then divide by 2.5