Verstappen, who got the jump on pole-sitter Hamilton following a brilliant start in wet conditions in Imola, held his nerve as the chaos unfolded behind him.
Hamilton was in pursuit of Verstappen after switching to dry rubber, but the world champion made an uncharacteristic mistake, sliding into the gravel at the left-handed Tosa corner.
He managed to reverse out of the sand trap before stopping for repairs and fighting back from ninth to finish second. Lando Norris finished third for McLaren following a fine drive by the young Briton.
The race was red-flagged for 30 minutes on lap 34 when British driver Russell and Bottas collided at high speed.
After calling Bottas a “f****** p***k” on the radio, Russell marched over to confront the winded Finn, leaning into his Mercedes cockpit and slapping him on the helmet. The flashpoint is being investigated by the stewards.
Verstappen should have won in Bahrain three weeks ago but for an illegal move on Hamilton for the win, while a mistake on his final lap in qualifying cost him pole in Imola.
But the Dutchman delivered a largely faultless display in the inclement conditions to take his 11th career win in a season which has started with two classic races.
Following a deluge of rain an hour before the race, the drivers started on wet rubber, and it was Verstappen, third on the grid, who executed a perfect getaway.
Racing past Red Bull team-mate Sergio Perez, he moved to the inside of Hamilton at the opening corner, with the latter running over the kerbs.
Hamilton claimed Verstappen did not leave him enough room, but the stewards looked at the incident and decided an investigation was not needed.
The safety car was then deployed when Nicholas Latifi lost control of his Williams in the tricky conditions and smashed into the wall. Moments later, Mick Schumacher also crashed, this time on the pit straight.
The racing resumed on lap seven, and Verstappen quickly established a five-second lead over Hamilton.
But by the time the leading pair changed over to slick tyres on lap 27, with Verstappen the first to change, Hamilton had reduced the gap to under two seconds.
But a slow stop for Hamilton ensured he left the pits five seconds behind his rival.
He then set about chasing Verstappen, but while putting a lap on Russell, he fell off the track. In attempting to rejoin the circuit he damaged his front wing before selecting reverse and finding his way back on to the asphalt.
“So sorry, guys,” a deflated Hamilton said over the radio.
As he limped back to the pits, Russell and Bottas collided and the race was stopped to clear the debris.
Russell was attempting to pass Bottas around the outside of the Finn’s Mercedes on the 200mph run down to the opening corner in Imola. But the Williams driver dipped his front-right tyre on to the damp grass, causing him to lose control of his Williams and crash into Bottas.
Once the debris was cleared the race started again and as Verstappen cruised off into the distance, Hamilton set about his recovery job.
He passed five drivers in 21 sensational laps, taking Norris around the outside of the first corner with three laps remaining to cross the line in second, 22 seconds behind Verstappen. Charles Leclerc finished fourth for Ferrari ahead of team-mate Carlos Sainz.
Hamilton set the fastest lap to claim a bonus point. He leads Verstappen in the championship by a single point.
Join our new commenting forum
Join thought-provoking conversations, follow other Independent readers and see their replies