Rain lashed the circuit in the hours before the race and continued in showers in the first hour, but it was a momentary dry spell at half distance that shuffled the field by tempting drivers onto slick rubber too early.
Both Lewis Hamilton and Charles Leclerc crashed out as the rain returned, and though the Mercedes driver was able to rejoin the race, Verstappen was able to inherit the lead.
Valtteri Bottas remained as his only genuine challenger, but when the Finn too smashed his car, the way was clear for Verstappen to press home his advantage to record his second win of the season.
“It was all about trying not to make too many mistakes,” he said. “Really tricky conditions, but amazing to win. I was very happy with the whole performance today.”
The race started in soaking wet conditions, causing chaos in the opening laps.
Mercedes drivers Hamilton and Bottas, starting from pole and third respectively, rocketed into the lead, but Verstappen slipped from second to fourth behind Kimi Raikkonen until he could snatch back the place from the Alfa Romeo on the next tour.
Vettel, starting from last after a power unit problem prevented him from setting a time in qualifying, leapt to 12th, and teammate Charles Leclerc, starting 10th after his own engine troubles on Saturday, jumped to sixth.
But the race was quickly neutralised when Sergio Perez smacked his Racing Point into the barriers.
Leclerc and Renault’s Nico Hulkenberg engaged in a battle for fourth place at the resumption, but their fight was interrupted on lap 15 when Daniel Ricciardo’s Renault pulled to the side of the road in a plume of smoke with an exhaust failure.
A virtual safety car was called, allowing both rivals to pit for fresh tyres without losing position, and the breathing space enabled Verstappen to take the battle to Valtteri Bottas for third.
By lap 22 the track was beginning to dry, and Vettel, now up to seventh, gambled on a switch to slicks on the following lap.
The pit lane subsequently became a hive of copycat activity. Verstappen came in on lap 25, and Bottas did likewise one lap later. Leclerc, however, jumped both when a second virtual safety car was called to recover Lando Norris’s stricken McLaren from the side of the road.
The Monegasque was immediately quick and began bearing down on Hamilton, still in the lead, for control of the grand prix, but his race immediately unravelled in intensifying rain when he went wide at the penultimate turn and beached his Ferrari in the gravel on lap 27.
The stranded Ferrari caused another safety car, but in the worsening conditions Hamilton too slid off the track, breaking his front wing. He limped back to the pits, but his team wasn’t ready with the fresh rubber, delaying the Briton’s exit by more than 50 seconds and dropping him to fifth.
To make matters worse, the stewards penalised him five seconds for entering the pit lane unsafely by cutting across the verge, effectively eliminated him from contention.
Max Verstappen inherited the lead of the race from Hulkenberg and Bottas in the chaos, but the second-placed German was no match for the following Finn, who passed him on lap 37.
Hamilton made short work of Alex Albon to take back fourth and was shortly by Hulkenberg for third on lap 38, and by lap 39 the Renault driver’s afternoon ended with a crash at the final turn, triggering yet another safety car.
The rain abated during the caution period and a dry racing line began emerging. Racing Point’s Lance Stroll sensed opportunity, pitting from 14th for a new set of softs on lap 44 with the safety car still out. Toro Rosso’s Daniil Kvyat did likewise on the following tour, and racing resumed on lap 46.
It was a perfectly timed move by their respective strategists. The rest of the field began making their stops at the end of lap 46, and by the time everyone had changed to slicks Stroll had inherited the lead ahead of Verstappen, Kvyat and Bottas.
The Canadian’s time at the front was short-lived, however, with Verstappen cruising past mere corners later to resume the lead. Kvyat came through next on lap 51, demoting Stroll to third.
Bottas, however, was struggling with his new slicks. He lay siege to the pink car ahead for five laps until, on lap 56, he carried too much speed into the second-last corner and spun into the barriers, ending his race and triggering the race’s final safety car.
Vettel, meanwhile, was finding great pace in his soft-shod Ferrari, climbing from ninth after Hulkenberg’s crash to fifth once Bottas retired, and when racing resumed for the final time he scythed past Carlos Sainz, Stroll and Kvyat to take the chequered flag second, completing a mammoth 19-place recovery.
“It was a long race,” he beamed. “At some stage it felt never-ending, but it was a lot of fun.
“Very tough with the conditions, very tough to read what was the smartest move, but I’m just happy.
“before the last safety car I realised I was quite a bit quicker and happy to pass people. It was quite straightforward — I was a little bit faster and could time it right, and I saw a lot of people being cautious into the first corner, so I just gave it everything.”
Kvyat completed the podium, standing on the rostrum for the first time since 2016 and recording Toro Rosso’s highest finish since 2018.
“It is amazing to be back on the podium,” he said. “And incredible for Toro Rosso after so many years — to bring the podium to the team is amazing.
“The race was crazy … it was a horror movie mixed with a black comedy.”
Stroll finished fourth to record Racing Point’s highest result of the year, while McLaren’s Carlos Sainz ended fifth.
Thai driver Alex Albon impressed to finish a feisty sixth in his first wet Formula One race.
Kimi Raikkonen and Antonio Giovinazzi took the flag in seventh and eighth for Alfa Romeo but were dropped out of the points with post-race penalties, promoting Haas duo Romain Grosjean and Kevin Magnussen two places for the team’s first points since May.
Lewis Hamilton was promoted to ninth as a result of the penalties, and Robert Kubica scored his Williams’s first point of the season in 10th.