Christian Benteke scored twice, either side of Andreas Weimann's well-worked goal, before Steven Gerrard's late consolation as the hosts' three-match winning run was ended in surprising fashion.
It was the first time Villa had scored more than once in any half of league football this season and extended their own unbeaten run to five matches, with only a second away win in 17 league games on the road.
Gerrard bundled a shot at goalkeeper Brad Guzan after a poor pass behind him from Luis Suarez, returning after suspension, rebounded back off Raheem Sterling before Stewart Downing shot wide after cutting in on his right foot.
The pressure continued with Joe Allen driving wide, Gerrard's feet getting in a tangle after being picked out by Suarez's inch-perfect cross-field ball and Jonjo Shelvey delaying his shot long enough got Nathan Baker to block after Suarez capitalised on Chris Herd's mistake.
Liverpool's inability to take their chances has hurt them in the past and it proved to be the case again in the 29th minute. Brett Holman passed inside to Benteke, who took a touch and - with no-one closing him down - unleashed a low shot which beat Jose Reina off the inside of his right-hand post.
The lead was doubled just before half-time with a brilliantly-worked goal. Weimann released Benteke in the inside-right channel and raced into a gaping hole in the Liverpool defence to turn the striker's clever backheel under Reina.
Liverpool should have got back into the game early in the second half when Ciaran Clark clearly pulled Daniel Agger's shirt in the penalty area but referee Neil Swarbrick maintained the Reds' record of not winning a penalty this season by ignoring the appeals.
It proved costly as when Joe Cole was robbed by Holman on the halfway line, Benteke was sensibly quickly given possession and he danced through the Reds backline to chip a shot past Reina.
When the Reds made a breakthrough it came too late with Gerrard heading in Glen Johnson's cross-shot three minutes from the end.