We looked to be cruising to victory after dominating the opening 45 minutes and netting through Andrey Arshavin and Samir Nasri.
But Villa were transformed in the second period and Ciaran Clark struck twice either side of Marouane Chamakh's 10th goal of the campaign before Jack Wilshere's injury-time clincher.
It enabled the lads to end an unhappy week on a high note after the derby defeat by Tottenham and the Champions League setback away to Braga.
We played some superb flowing football with Arshavin and Nasri a constant threat, but our soft under belly, which had seen them throw away a two-goal lead against Spurs, was almost exposed again.
Ashley Young posed more of a threat in the second period while Clark showed his potential.
We were almost gifted the lead in the opening 30 seconds after sloppy play by Stephen Warnock.
He played the ball straight into the path of Arshavin who released Chamakh inside the box.
Villa keeper Brad Friedel partially blocked the shot but it needed James Collins to make a goal-line clearance.
We were first to settle and Tomas Rosicky squandered a clearcut opening.
Nasri was the creator with a perfectly weighted pass to leave Rosicky with only Friedel to beat but he drilled his shot across the face of goal.
The Villa midfield was being by-passed by our quality passing and movement.
We continued to dominate and Friedel saved from Rosicky away to his right although he did not make full contact on his shot.
Villa were being pulled apart almost at will and Arshavin had a shot deflected for a corner after exchanging passes with Chamakh.
Nasri dragged a shot just past the post as the home side hung on desperately.
It was 26 minutes before Villa created a worthwhile chance - and Ashley Young should have given them the lead.
Stewart Downing's dangerous, inswinging centre found it's way to Young unmarked inside the six yard box at the post but he sent his shot over the bar.
Vill tried to get a foothold in the game and Laurent Koscielny had to be alert to cut out a dangerous cross from the overlapping Warnock after good play by Bannan.
But it was no surprise when Arshavin put us ahead after 39 minutes.
Arshavin picked the ball up on the left and cut inside and past the challenge of Richard Dunne before firing a low shot into the far corner of the net.
Nasri could have made it 2-0 a minute later when he slipped the ball wide of Friedel but drilled his effort into the side netting.
Friedel made a superb save to keep out Chamakh's header from Bacary Sagna's cross.
But a minute before half-time Nasri made it 2-0 with a superb volley direct from Arshavin 's corner.
Houllier opted for a half-time change with Nathan Delfouneso replacing Robert Pires and giving support up front to John Carew.
After 52 minutes Clark reduced the arrears with his first senior goal for the club.
Bannan's cross was only half cleared by Sebastien Squillaci to Clark on the edge of the box and his left-footed drive flew past Lukasz Fabianski into the roof of the net.
Villa were transformed after their ineffective first half performance but in the 56th minute Chamakh restored our two goal advantage.
Rosicky played the ball into the path of the striker who managed to flick the ball under Friedel's body.
Houllier brought on Stephen Ireland for Carew after 66 minutes.
Clark had a golden chance to net a second goal but screwed his shot wide from 10 yards out.
But after 71 minutes the youngster did strike again.
Ashley Young's corner was flicked on by Dunne and Clark forced the ball over the line.
Chamakh was yellow carded for a challenge on Dunne. Friedel denied Chamakh on the edge of the box after being freed by Arshavin.
But we looked nervy when Villa ventured forward in a tense finish.
Wilshere made it 4-2 from Chamakh's cross in injury-time.