Reading stunned Villa with two goals from Republic of Ireland international striker Shane Long, back in the side after completing a four-match suspension, but Villa hit back with three goals early in the second half and a stoppage-time penalty.
The Royals opener came midway through the first half following a left-wing corner by Brian Howard. Defender Matt Mills outjumped the Villa defence to head on to the unmarked Long, who calmly headed home.
Reading added a second three minutes before the break. A superb pass from Gylfi Sigurdsson sent Jimmy Kebe clear down the right wing and his cross into the centre was calmly fired home by Long, who was again given too much room by the Villa defence.
Villa clearly realised during the interval that they had to step up their game to compete with the Royals and they came storming out in the second half with three goals in the opening 12 minutes.
First Ashley Young turned the ball in from close range after a Carlos Cuellar mis-kick had wrong-footed the Reading defence and, almost immediately, Stewart Downing sent in a right-wing cross for John Carew to outjump Mills and head the equaliser.
It was Carew again with Villa's third. Stephen Warnock overlapped down the left wing and sent a low cross into the centre where Carew just got in front of Ivar Ingimarsson to glide the ball past Reading keeper Adam Federici.
Villa almost made it four in the 68th minute but Emile Heskey saw his close-range effort well blocked by Federici.
Then it was Reading's turn to go close. Ingimarsson's header from Sigurdsson's corner beat Villa keeper Brad Friedel but Ashley Young headed clear from the goal-line.
As Reading battled for an equaliser substitute Grzegorz Rasiak forced a save from Friedel and then Kebe saw a shot on target blocked by Warnock.
As the game ticked into stoppage time, Ingimarsson brought down Carew and the Norway international completed his hat-trick from the penalty spot.