Michael Chopra had fired the Championship side in front but the recalled Darren Bent levelled just after the break before Andreas Weimann headed in the late winner.
Villa, with Bent starting after a five-match absence, forced the early pace before Daryl Murphy and Chopra combined well but Shay Given was quickly off his line to avert the danger.
The lively Chopra fired wide before Bent attempted to set up Jordan Bowery but the former Chesterfield striker - making his first start for Villa - could not connect with the low cross.
Bowrey was foiled by a superb Scott Loach save and the home side promptly fell behind (31) when Chopra skipped round Nathan Baker and his ball across the face went in off Eric Lichaj.
Chopra then found Lee Martin who fired straight at Given, and Chopra was denied by the alert Given moments later as the Holte End grew increasingly restless.
Loach did well to beat away Ciaran Clark's header at his near post but Villa were forced into a change when Marc Albrighton was replaced by Weimann.
Charles N'Zogbia was the architect of the equaliser, bursting clear of the Town defence before picking out Bent (46) who poked the ball home from eight yards.
Patrick Kisnorbo almost diverted a Joe Bennett cross into his own net, while Loach again showed his mettle to deny Bent his second of the afternoon as the pressure mounted.
Gabriel Agbonlahor was introduced for the final quarter and was soon having a decisive impact, his surging run and flighted cross giving Weimann (83) the opportunity to glance home the winner.