Ricciardo led home his teammate Lando Norris in a McLaren 1-2, with Valtteri Bottas ending up third after making excellent progress up the order in the race's opening half after starting last and then capitalising on the chaos that followed the incident that eliminated Verstappen and Hamilton.
That happened at the very end of the race's pitstop phase, with the Mercedes driver coming out of the pits and trying to get back on terms with Norris, who had stopped a lap earlier, in their fight over third.
But Verstappen, the race's polesitter and only behind Hamilton thanks to his stop going wrong, shot alongside the side of his title rival on the approach to the first corner.
They went side-by-side past the Rettifilo chicane's first apex and then with Verstappen ending up over the big kerbs leading to the second he was fired into Hamilton's side – the Mercedes still close alongside.
Then contact put Verstappen over Hamilton's rear wing, engine cover, roll hoop and halo, with both cars trapped in the gravel on the chicane's outside – the Red Bull stranded on top of the front of the Mercedes.
Both were therefore out and the safety car called, which set-up a thrilling second half of the race.
At the start, Verstappen and Ricciardo leapt off the line in unison, but the McLaren's acceleration was better and Ricciardo was able to pull alongside his former teammate on the run to the first corner.
With Ricciardo on the inside line he easily seized first place and pulled clear, with Hamilton, alone of the leaders to start on hard tyres and not mediums going around the outside of Norris exiting the second part of the Rettifilo chicane.
As Ricciardo led the pack to the della Roggia chicane, Hamilton shot alongside Verstappen and the pair clashed between the sequence's two apexes – the title rivals making side-on wheel-to-wheel contact.
Hamilton therefore jumped across the kerbs to cut the second apex, which cost him momentum and allowing Norris to get back ahead into third on the approach to the first Lesmo.
The race was then briefly interrupted by a virtual safety car period, called to allow debris to be cleared from a shunt involving Carlos Sainz and Antonio Giovinazzi.
The latter was attacking Charles Leclerc for fourth into the della Roggia, but he too cut the second apex after being edged out of a move and as he rejoined the track he came across the following Sainz's bow and was speared into the wall on the outside with the Ferrari left with no room in an incident that wiped off Giovinazzi's front wing and dropped him to last, and for which he was doubly punished with a five-second time addition from the stewards.
The VSC ended on the second lap at the end of which Ricciardo led by 1.2s over Verstappen, who then set a fastest lap to make sure he was within DRS range when the system was activated for the start of lap four of 53.
The Red Bull was able to stay within a second but could not get any closer for the next phase of the race, as the two leaders pulled clear of Norris, who was under similar intense pressure from Hamilton.
As Ricciardo and Verstappen lapped more regularly in the mid-high 1m26s compared to Norris, the Briton gradually fell back from the rear of the Red Bull – his pace also edging Hamilton back towards Leclerc.
By lap 20, Ricciardo, still only 0.9s in front of Verstappen, was 6.0s clear of his teammate, as McLaren and Red Bull considered when would be best to come in and get rid of the mediums their drivers were struggling to keep alive without getting stuck behind traffic in the chasing pack.
As the first stint wore on, Verstappen reported similar struggles with his rear tyres to Ricciardo, and locked up on lap 21 on the approach to the first corner – the Dutchman sliding past the apex and bumping over the high kerbs behind the second apex.
That meant Ricciardo's lead grew to 1.4s and he came in at the end of the following lap to switch to the hards.
Red Bull called Verstappen in immediately afterwards on lap 23, but an 11.1s stop thanks to a slow right-front change meant he had no chance of taking the lead.
The big danger for Ricciardo was suddenly from Hamilton, as he had passed Norris with a bold move to the outside of the della Roggia chicane on lap 24, but that threat ended when the Mercedes driver pitted at the end of the next tour and emerged into the crash with Verstappen.
The race was neutralised by the safety car for the next six laps, with its intervention meaning Leclerc and the chasing pack could pit and gain ground on the McLarens.
The order at the restart on lap 31 was Ricciardo, Leclerc, Norris, Sergio Perez, Carlos Sainz Jr and Valtteri Bottas – who had been making steady progress up the order from last on the grid thanks to his pre-Friday-qualifying engine change.
Bottas was able to get by slower rivals in a way Hamilton had struggled to against Norris in the early phase of the race and had come in during the safety car to change the hards he had started on for mediums.
Ricciardo dropped Leclerc at the restart, with Norris battling the Ferrari into the Rettifilo chicane, then getting by with a stunning blast to the inside of the Curva Grande and chasing after his teammate.
Leclerc was soon overcome by Perez – controversially when the Red Bull bumped over the kerbs at the second chicane's second apex after his move around the outside did not come off – then Bottas, which took the Mercedes driver two attempts as Leclerc cut the first chicane on lap 33, before giving the place back then blasting by on the run to the second chicane with a handy slipstream.
Norris was pressuring Ricciardo up front, with Bottas finally passing Leclerc at the first corner a lap after his first attack had failed, the Briton urging McLaren to tell his teammate to up his pace.
Ricciardo did so under orders to show his ultimate pace on the hards to the finish, which brought up into the high 1m25s Norris had been able to reach in the phase immediately after the safety car, with Bottas the biggest threat once Perez was handed a five-second time addition for the incident at the second chicane with Leclerc.
But as the McLarens set about pulling away, Bottas's charge stalled behind Perez – a move around the outside of the della Roggia chicane's first apex failing just when it looked like the Finn was ahead as he lost momentum exiting the second apex and the Red Bull moved back ahead.
Over the remaining 20 laps, Ricciardo's increased pace pulled him gradually clear of Norris, who was told "It's best for us where you are" after he asked McLaren if the current order was its preference.
Norris was out of DRS threat for the closing stages, with Perez likewise not in a position to threaten McLaren's 1-2 – even as the pack negotiated a second VSC phase when Nikita Mazepin's Haas lost drive and pulled over on the outside of the Ascari chicane on lap 43.
Compared to the middle third of the race, the final phase was much calmer, with Ricciardo coming home to take a first win since Monaco 2018 by 1.7s, and for good measure setting the fastest lap of the race on the last lap.
Bottas was bumped up to third by Perez's penalty as he could not find a way by before the finish, with the Mexican driver ending up down in fifth behind Leclerc – but just ahead of Sainz.
Lance Stroll was seventh but faces a post-race investigation for possibly failing to slow for yellow flags, with Fernando Alonso eighth.
George Russell finished ninth ahead of Esteban Ocon – who earlier in the race had picked up a five-second time addition served at his stop for clashing with Sebastian Vettel (12th) at the second chicane.
Yuki Tsunoda did not start the race due to a brake problem, with his teammate Pierre Gasly retiring early after going through pre-start drama on the laps to the grid.