By Rob Bishop
Two-goal Andi Weimann raised hopes of Villa's first home win over Manchester United for 17 years, only for the visitors to storm back and snatch victory through sub Javier Hernandez three minutes from the end.
Weimann had fired Paul Lambert's men ahead in first-half stoppage time, and the Austrian ace seemed to have put Villa on course for a famous win over the Red Devils when he doubled the advantage five minutes after the break.
But Hernandez, an interval replacement for former Villa man Ashley Young, reduced the deficit on 59 minutes, and four minutes later Ron Vlaar was unfortunate to deflect a Hernandez volley into his own net.
Villa twice breathed sighs of relief when Robin Van Persie hit the bar with a header and then a shot but it looked as if they would take a point until Hernandez grabbed his second.
Enda Stevens, making his first Barclays Premier League start, made a vital contribution before three minutes had elapsed when he blocked an Antonio Valencia piledriver at the expense of a corner.
Van Persie got in a header from the flag kick which Brad Guzan saved comfortably, although the keeper was relieved to see a cross-shot from Young flash just beyond the far post.
After that early United flurry, though, the home side created the better chances during the opening half hour.
Barry Bannan's free-kick flicked off a United head for a corner and that preceded two corners in quick succession.
Then Bannan's lofted pass was cleverly headed down by Stephen Ireland to send Weimann on a run, before Ashley Westwood's superb pass was controlled by Christian Benteke 10 yards out.
The Belgium international hit a low shot which struck Rafael and went behind for another corner.
Although every United attack was laced with menace, it was Villa again who forced a chance on 35 minutes, Weimann's sheer tenacity enabling the ball to run to Ireland, who sent a 25-yard left-footer not far off target.
It was the 44th minute, in fact, before the visitors' next shot, Rooney's powerful 30-yard effort being well held by Guzan - and in first half stoppage time Villa were ahead.
Weimann actually started the move when he broke up a United attack and surged forward before playing the ball to Benteke on the left.
The striker's pace and strength saw him twice outmuscle Chris Smalling before he played an intelligent pass across the penalty area.
Weimann, having perfectly timed his run through the middle, produced a sidefoot shot which simply had too much power for David De Gea as it flew past the keeper's despairing dive.
Despite United's forceful start to the second half, Lambert's men doubled their lead with another magnificent goal in the 50th minute.
Benteke was again involved in the build-up as a flowing move culminated in Gabby Agbonlahor cutting in from the left and crossing low and hard for Weimann to turn home inside the six-yard box.
But the visitors stormed back in deadly fashion.
Hernandez reduced the deficit when he held off Ciaran Clark's challenge to send a precise low shot past Guzan.
And after Benteke had met Weimann's deep cross with a header that was saved at the foot of the post by De Gea, the visitors were level when Rafael crossed from the right,
Hernandez produced a volley from beyond the far post and the ball flew in off Vlaar.
The chances continued to come thick and fast, with Guzan brilliantly pushing aside a Rooney drive which was destined for the bottom corner and De Gea making an even more difficult save when he tipped away Weimann's glancing header from Bannan's left-wing cross.
Villa certainly rode their luck when Van Persie hit the bar twice in barely a minute, first with a close-range header and then with an angled left-footer from the right-hand edge of the penalty area.
But in the 87th minute Van Persie delivered a free-kick from the right and Hernandez stooped to head the winner from six yards.
Villa: Guzan; Lowton, Vlaar, Clark, Stevens; Westwood, Bannan (Delph, 87); Weimann (Holman, 81), Ireland (El Ahmadi, 79) Agbonlahor; Benteke. Unused subs: Given, Albrighton, Bowery, Williams.
Man United: De Gea; Rafael, Smalling, Ferdinand, Evra; Valencia, Carrick, Scholes (Cleverley, 71), Young (Hernandez, HT); Rooney (Anderson, 79), Van Persie. Unused subs: Lindegaard, Wellbeck, Fletcher, Buttner.