The England striker celebrated his first league start for six months by heading home an 87th-minute cross from Stephen Warnock.
Related ArticlesWolves v Aston Villa: as it happenedTelegraph player raterWolves v Aston Villa: match previewHoullier faces a robust testHeskey relishing his new dawn at Villa ParkHoullier wants Villa to shake off 'nice club' imageMatt Jarvis' first goal of the campaign looked to have rescued Wolves a point after Stewart Downing's close range effort separated the sides at half-time.
Villa were the better side in the first half with Ashley Young impressing in his role just behind the revitalised Heskey.
Nigel Reo-Coker was dominant in midfield while Carlos Cuellar made a series of crucial interceptions when Wolves did threaten.
But Wolves were a revitalised force in the second 45 minutes with Brad Friedel the busier of the two goalkeepers.
Jarvis was at the heart of their most threatening moments while David Jones impressed in the centre of the park before Heskey denied them a point.
It means Villa are unbeaten in 17 matches with Wolves stretching back 30 years.
The home side created the first clearcut opening after six minutes when Kevin Doyle's reverse pass picked out the run into the box of David Edwards.
But he hesitated for a split second and eventually shot high and wide when under pressure from Warnock.
Wolves were playing at a high tempo and Reo-Coker made a brave block on Karl Henry's shot after Cuellar had headed clear a Jarvis corner.
Warnock became the first player to be yellow carded - and for the third successive league game - in the 18th minute after a sliding challenge on Edwards.
Hahnemann reacted sharply to keep out a downward header from James Collins following a Downing corner.
Villa started to enjoy more possession and after 26 minutes Downing put them ahead.
Reo-Coker found Heskey who held the ball up well before finding Marc Albrighton in space on the right.
He drilled a dipping centre right across the six-yard box and Downing stayed on-side to deflect the ball past Hahnemann from close range.
Villa dominated proceedings but it needed a double save from Friedel to keep Villa on level terms after 35 minutes.
First the veteran goalkeeper parried a fierce volley from Fletcher and then kept out the follow-up effort from Doyle.
Wolves were forced to make a change in the 38th minute when Stephen Ward limped out of the action to be replaced by George Elokobi in a straight swap at left-back.
A long throw from Elokobi caused problems and Cuellar had to block an effort from Jody Craddock.
Wolves made an impressive start to the second period and Warnock escaped a second yellow card after bringing down Doyle in a counter-attack by the home side.
Wolves boss Mick McCarthy appeared unhappy with the decision and made his feelings known to the fourth official.
Villa were forced to back pedal and Friedel went down to his right to keep out a volley from Christophe Berra.
Craddock was booked after bringing down Ashley Young.
But after 61 minutes Wolves got back on level terms through Jarvis.
The midfielder cut back inside onto his right foot and floated a dangerous ball across the box.
Edwards attacked the ball but failed to get a touch and it flew across Friedel into the far corner of the net.
Ashley Young continued to pose the biggest threat for Villa and one cross just evaded the run of Reo-Coker.
Villa brought on striker Gabriel Agbonlahor in place of Albrighton after 66 minutes.
Hahnemann produced a superb finger-tip save to keep out Ashley Young's rasping drive.
Adlene Guedioura came on for Edwards in the 81st minute and quickly tested Friedel with a low drive.
But with three minutes remaining Heskey snatched the winner.
Warnock supplied a probing cross from the left flank and Heskey rose to place a header into the corner of the net.
In injury-time Villa substitute Steve Sidwell, who had replaced skipper Stiliyan Petrov, was yellow carded for a challenge on Guedioura who was stretchered off.