The Dutchman won from ninth on the grid after a poor start to the race on Saturday, when he lost a qualifying session and suffered a late-race crash from Charles Leclerc Accidents and lost further opportunities.
He was fitted with the opposite hard tire from Perez, who started the race from pole, with the Mexican securing a lead over front-row starter Fernando Alonso.
Verstappen initially dropped to 10th on the grid as Valtteri Bottas – who started alongside him on the grid – got off to a better start and passed the Alpine of Red Bull and Esteban Ocon.
But the two-time champion settled down and quickly dispatched the leading teams at the end of the second lap.
Further quick passes from Leclerc and Kevin Magnussen rolled into a fine game for sixth, bringing Verstappen closer to the front of the field.
A series of fastest laps in the early stages continued to put Verstappen back into action, and he got traction from Russell with DRS at Turn 17 on lap 8 of the race, as the Briton complained about vibrations on the brakes.
Pierre Gasly followed on the next lap and proved an easy choice at the hot 17 hairpin, pushing Verstappen into the top four.
He spent considerable time behind Carlos Sainz, but Verstappen passed the Spaniard on lap 14, as Sainz gave Alonso’s DRS the lead, providing token defence.
Alonso was also sent off on the next lap, with Perez now leading by 3.6 seconds, but the Mexican reported that the right front tire was starting to give up as the middle piece began to wear out in the Miami heat.
Verstappen closed the gap to 2.2 seconds before Perez swapped his old medium tires for a hard set on lap 20 to give car 1 the lead and it became a situation where both cars were managing the hard tyres.
Perez’s task was even more difficult as he tried to close an 18-second deficit over Verstappen, who had to hold that gap before pitting for medium tires late in the race.
By lap 32, Perez closed the gap to 14.8 seconds, but Verstappen then picked up the pace and managed to ensure the gap widened again over the next 13 laps.
Verstappen eventually switched to neutral tyres, 12 laps from the finish, to widen the gap to 18.3 seconds, but he briefly ceded the lead to his team-mate after the pit stop was completed, leaving him 1.6 seconds behind.
A pass from Verstappen seemed inevitable, although Perez took his defense into Turn 17 in the 47th circuit circuit to keep his team-mate behind.
Nevertheless, Verstappen remained close and charged into Turn 1 on the next lap to seal the win, setting the fastest lap on the penultimate lap.
Perez crossed the finish line with a gap of 5.3 seconds, while Alonso completed the podium with a gap of 20.9 seconds – feeling he was a “lonely race”, finishing third.
Russell emerged from the pack with a reverse strategy to pass two Ferraris for fourth, with Sainz not far behind, who was on the heels of Alonso earlier in the race for fifth.
Lewis Hamilton made late action on Leclerc on lap 55 to save sixth from a 13th grid position, despite trailing Nico Hulkenberg in the first half of the race, his opposite The strategy still works.
Leclerc, meanwhile, trailed Magnussen for much of the race and converted seventh on the grid to the same position at the end, ahead of Pierre Gasly and Ocon’s Alpine .
Magnussen finished the top 10 with a 1.3-second lead over the rapidly approaching Yuki Kakuda at the end of the race.
F1 Miami Grand Prix: Full race results