Mexican Sergio Perez finished a dutiful second, 13 seconds behind but with the consolation of a bonus point for fastest lap, after being told to let his team mate pass for a third victory in a row after Imola and Miami.
The 24-year-old Dutch driver is now six points clear of Leclerc after winning four of six races -- all those he has finished.
Britain's George Russell came third for a revived Mercedes and after going wheel-to-wheel with Verstappen early on in a thrilling display of defensive driving as they battled for second place behind Leclerc.
Ferrari's Carlos Sainz was fourth, after fighting back from a slow start and a spin into the gravel, but it was scant reward for a team who had brought upgrades to try and turn the tables on Red Bull.
Leclerc was leading comfortably from pole position but a sudden loss of power before the halfway mark led to his retirement in the pits.
"No, no, no! Lost power," the Ferrari driver shouted over the radio as a seemingly sure victory was plucked from his hands by the engine failure.
The Monegasque waved to the capacity Circuit de Catalunya crowd but from then on could only watch his 19-point advantage evaporate in the searing heat.
"I had no indications before then. It just broke and lost the power completely," he told Sky Sports television.
Verstappen also suffered intermittent problems with his car's drag reduction system (DRS), leading to plenty of cursing over the radio, and he went off into the gravel at turn four on lap eight.
"I went off when I had a lot of tailwind and lost the rear. My DRS was not always working. That made it very tough but we managed use strategy to get ahead. It was a difficult beginning but a good end," he said.
"I tried to stay focused. It is not nice when stuff like that happens. I am very happy to win and happy for Checo (Perez). It is a great result for the team."
Seven-times world champion Lewis Hamilton was fifth for Mercedes with a fine recovery drive after an opening lap collision with Kevin Magnussen's Haas dropped him to 19th.
He was passed by Sainz on the closing laps after Mercedes warned of a potentially terminal cooling issue.
Alfa Romeo's Valtteri Bottas was sixth, ahead of Alpine's Esteban Ocon and McLaren's Lando Norris in eighth.
Spain's twice world champion Fernando Alonso finished ninth in front of his home fans, after starting at the back of the grid, and AlphaTauri's Yuki Tsunoda collected the final point.