Christian Benteke and Gabby Agbonlahor fired Villa to a vital victory which lifted them out of the bottom three.
And the Belgium international had the distinction of netting the club's 1,000th goal in the Barclays Premier League.
His 33rd-minute equaliser cancelled out an own goal by Nathan Baker only a minute earlier - and Agbonlahor secured three crucial points with a stunning winner on the stroke of half-time.
It was a result which will give Paul Lambert's men immense confidence in the battle for top-flight survival and one which was thoroughly deserved, even though Noel Hunt had a second-half effort disallowed by a tight offside decision.
A nervy opening 10 minutes produced a chance at either end.
Brad Guzan did well to tip away Adam Le Fondre's far-post header following a deep cross from Hal Robson-Kanu, while Ciaran Clark headed over for Villa when he climbed highest in a crowded goalmouth to connect with Ashley Westwood's free-kick from the left.
But in the 11th minute,the visitors were within a whisker of taking the lead, Benteke's firm header from Baker's left-wing cross hitting the bar before Reading cleared the danger.
Barely 60 seconds later, Benteke just failed to make contact with Westwood's hard low cross, although the Berkshire outfit also went close when Robson-Kanu's low left-footer from just outside the penalty area flashed only narrowly wide.
Andreas Weimann's flicked header from inside his own half set up a promising opening on 28 minutes as Benteke went racing through the middle.
Although the striker appeared to be fouled, referee Moss allowed play to continue and Weimann dragged his left-foot shot wide.
The deadlock was finally broken when Jobi McAnuff crossed low from the left , Hope Akpan flicked on and Baker, attempting to clear at the far post, missed the ball with his right foot and saw it deflect in off his left.
It was all the more galling because the ball was going off target but Villa's disappointment quickly turned to delight.
Westwood's superb pass set up Weimann for a low cross from the right and Benteke calmly side-footed the ball past former Villa keeper Stuart Taylor from eight yards.
And on the stroke of half-time the visitors were in front. Weimann's centre from the right was partially cleared but Matt Lowton headed back into the goalmouth and Barry Bannan's angled shot came back off the inside of the post.
Agbonlahor thumped the rebound left-footed into the top corner before anyone else could react.
It was a goal which gave Villa a tremendous lift as the second half unfolded.
Benteke had a strong run halted by a well-time challenge before hitting an angled drive which struck a defender and looped over for a corner.
Then Baker was not far off target with a close-range header.
Yacouba Sylla, enjoying a fine game on his first starting appearance, also went close when his thundering 20-yard drive was only just too high.
Even so, there was a real scare on 55 minutes when Noel Hunt converted McAnuff's centre at the far post, only to be denied by a marginal offside decision.
Le Fondre was also frustrated when he fired wide from a good position 10 yards out after getting the better of Ron Vlaar, while Guzan did well to clutch a powerful header from sub Nick Blackman.
Agbonlahor almost claimed his second in the 77th minute, curling a right-footer beyond Taylor and only narrowly past the far upright after his exchange of passes with Weimann had opened up the Royals defence.
Sub Charles N'Zogbia fired over after a similar link-up with Benteke, but Robson-Kanu was only a foot wide with a skidding low effort from the edge of the box.
In the closing minutes Benteke had a close-range shot saved by Taylor while N'Zogbia's 20-yard free-kick was too high.
Reading: Taylor; Kelly, Mariappa, Pearce, Harte; Robson-Kanu, Leigertwood (Guthrie 81), Akpan (McCleary 56), McAnuff; Hunt (Blackman 56), Le Fondre. Unused subs: Shorey, Karacan, Morrison, Henly.
Villa: Guzan; Lowton, Vlaar, Clark, Baker (Bennett 80); Sylla, Westwood, Bannan (N'Zogbia 71); Weimann, Agbonlahor; Benteke. Unused subs: Given, Holman, Bowery, Dawkins, Carruthers.
Snap up match tickets for our clash with QPR.