United looked in serious danger of slumping to their third defeat of the season when Andreas Weimann's second goal handed Villa a 2-0 lead after 50 minutes.
But Sir Alex Ferguson's decision to introduce Javier Hernandez for former Villa winger Ashley Young at half-time proved to be inspired.
The Mexico international pulled one back with a neat finish and then another shot from Hernandez was deflected in by Villa defender Ron Vlaar. And it was Hernandez who grabbed the 87th-minute winner when he headed in Robin van Persie's free kick.
United extended their lead at the top over Chelsea, who host Liverpool today, with defending champions Manchester City a further point adrift. Roberto Mancini's men take on Tottenham at the Etihad Stadium this lunchtime.
Arsenal squandered a 2-0 lead for the second time in five days and missed an injury-time penalty as Fulham claimed a 3-3 draw at the Emirates Stadium.
The Gunners went ahead through Olivier Giroud's header and doubled their advantage when Lukas Podolski swept home Mikel Arteta's centre.
But Fulham pulled one back after 29 minutes as an unmarked Dimitar Berbatov nodded in Bryan Ruiz's corner from inside the six-yard box and they equalised when Berbatov's cross from the right was headed in by substitute Alex Kacaniklic.
The Cottagers took the lead for the first time when Arteta dragged down Ruiz in the area and Berbatov stroked home a 67th-minute spot kick.
But the visitors' joy was shortlived as Giroud, having placed his first effort against the post, reacted well to head in Theo Walcott's subsequent cross.
Arsenal could have won it in the fourth minute of stoppage-time when referee Phil Dowd adjudged Sascha Riether had handled Andrey Arshavin's cross, but Mark Schwarzer kept out Arteta's low spot-kick.
Everton stay in fourth spot after coming from behind to beat struggling Sunderland 2-1 at Goodison Park. The visitors made the breakthrough when Adam Johnson netted shortly before the break.
But, following plenty of Everton pressure, Marouane Fellaini drove past Simon Mignolet after 76 minutes and, two minutes later, the Belgian cleverly flicked on for Nikica Jelavic to fire home.
West Brom won 2-1 at Wigan thanks to a James Morrison header and a Gary Caldwell own net. Scotland midfielder Morrison was on hand to head home Chris Brunt's left-footed cross after 31 minutes.
When Caldwell put through his own goal, it looked good for the Baggies. Arouna Kone pulled one back just before half-time, but Wigan could not find a leveller.
Southampton and Swansea fought out a 1-1 stalemate at St Mary's while a Charlie Adam goal ensured a 1-0 win for Stoke over Queens Park Rangers. The defeat, QPR's seventh of the season, means Mark Hughes' men stay bottom.
Reading could not find a way past Norwich as their search for their first league victory of the season went on. The teams played out a goalless stalemate.
Barclays Premier League: Hernandez rescues REDS