Villa, lacking nine players through injury or illness, stunned United as Ashley Young and Marc Albrighton put them in command with only 15 minutes remaining.
But United rallied through Federico Macheda (81) and skipper Nemanja Vidic (85) to maintain their unbeaten record this season.
Nevertheless, they are still three points behind leaders Chelsea who have a game in hand against Sunderland on Sunday.
Villa handed a league debut to 21-year-old reserve midfielder Jonathan Hogg after Ciaran Clark pulled out through injury.
The home side’s bench was packed with youngsters including youth team captain Daniel Johnson and rookie Australian duo Chris Herd and Shane Lowry.
United, without the suspended Paul Scholes, were the first to settle and dominated the early exchanges.
Nani got into a dangerous position on the right flank after being found in space by Darren Fletcher but no-one attacked his low centre.
Nani had the first effort on goal after 13 minutes but his 20 yard effort flew over Brad Friedel’s crossbar.
Villa threatened for the first time when a reverse pass from Barry Bannan found Stewart Downing in space inside the United box.
But the quality of his delivery across the box could have been better and Rio Ferdinand was able to clear the ball for a corner.
Dimitar Berbatov squandered a great chance to put United ahead after 16 minutes.
He timed his run to beat the offside trap and run onto Javier Hernandez’s pass but, from eight yards out, he drilled his shot wide.
Bannan became the first player to be yellow carded for chopping down Hernandez in full flight.
The chances were starting to come for United and Wes Brown deflected the ball wide when he attacked a free-kick played into the near post by Nani.
Edwin van der Sar was called upon to make his first meaningful save after half an hour.
Gabriel Agbonlahor flicked on a long free-kick from James Collins to Ashley Young who turned sharply and forced van der Sar to save low to his right.
Villa ended the first half with a flourish and Brown blocked a goal-bound shot from Downing at the expense of a corner.
Then Richard Dunne sent a downward header straight at van der Sar from Ashley Young’s corner.
Villa started the second half purposefully and Albrighton had a shot deflected into the sidenetting by Patrice Evra although referee Mike Dean awarded a goal-kick.
Nani was yellow carded after 52 minutes after appearing to catch Stephen Warnock with his elbow in an aerial challenge.
Albrighton should have put Villa ahead after 52 minutes.
Downing exchanged passes with Ashley Young before delivering a dangerous far post cross.
Albrighton was unmarked six yards out but sent his header back across goal and inches wide of the far post.
United retaliated and James Collins blocked a Dimitar Berbatov volley from a Nani corner.
Luke Young was yellow carded for a late challenge on Nani and then Hernandez was booked for a mis-timed tackle on Albrighton.
Villa were now looking more confident and United were rescued by the woodwork twice in the space of two minutes.
First Collins sent a thumping header against the crossbar from Downing’s centre.
Then Gabriel Agbonlahor crashed a shot against the post after Ashley Young’s initial effort had been blocked.
Villa’s pressure finally paid off after 72 minutes when Ashley Young lashed home a penalty after he had been brought down by Brown as he attempted to convert a pass from Agbonlahor.
Sir Alex Ferguson responded by replacing Berbatov and Hernandez with Macheda and Gabriel Obertan respectively.
But after 75 minutes Villa doubled their lead through Albrighton.
Ashley Young found Downing in space and his cross was turned home at the far post by Albrighton.
United rallied and Ferdinand had a header cleared off the line by Albrighton.
Then Macheda reduced the arrears with a stunning 20-yard drive after Darren Fletcher back-heeled the ball back into his path.
With five minutes left Vidic made it 2-2 with a far post header from Nani’s deep centre.
In injury-time Friedel blocked a shot from Obertan.