The result ends Villa's club-record winless streak at 19 matches, but they remain eight points from safety after picking up their first home win of the campaign and just their second overall.
© Getty Images
The visitors almost made a perfect start to the match when they came within the width of the woodwork of a first-minute lead as Wilfried Zaha combined with Jason Puncheon on his way into the box before curling an effort against the foot of the post.
Villa responded having survived that early scare, with Ashley Westwood coming close from the edge of the box moments later and Jordan Veretout having the first shot on target of the match, albeit a simple one for Hennessey.
Bakary Sako, who marked his debut with the winning goal against Villa in August, looked to haunt the hosts again when he let fly from range, but his powerful strike flew over the crossbar and moments later it was Villa on the attack again when Jordan Ayew slammed the ball into the side-netting.
The first chance of the second half went the way of the home side as Libor Kozak, making a rare start for Villa, managed to get a shot away that deflected towards the bottom corner but was turned past the post before it could sneak in.
The resulting corner came to nothing, but it was from a set piece that Villa broke the deadlock when Hennessey failed to deal with Joleon Lescott's header, allowing the ball to creep between his legs and agonisingly over the line.
It was Villa who came closest to adding the game's second goal too when Ayew wriggled his way into the box only to end a fine solo effort by blasting his finish over the crossbar.
There was one late chance for Palace when a cross reached Scott Dann at the back post, but it skidded away from the defender and with it went any hope of the visitors hauling their way back into the match.
Palace have now gone four Premier League games without a goal for the first time since 1998 and remain seventh in the table, while Villa have closed the gap on nearest rivals Sunderland to four points.