The forward's well-taken volley just before the hour mark was enough to settle a forgettable skirmish between two of the Premier League's lowest-scoring sides and give Paul Lambert just a second league win since his summer appointment.
Victory took Villa level on points with their hosts, whose supporters have had just three home goals to cheer since August.
Two of those came from Steven Fletcher and the Scotland striker was denied a sixth of the season by a correct - if marginal - offside call as he clipped Stephane Sessegnon's pass over Brad Guzan.
Adam Johnson was the home side's likeliest source of opportunities, the winger teeing up Sessegnon for a blocked shot and Lee Cattermole for a curler feathered a foot past the angle of post and crossbar.
But clear chances were hard to come by at either end before the break, Simon Mignolet's only involvement a routine stop from Andreas Weimann's 20-yarder.
That changed after half-time, Guzan's misjudgement going unpunished as Seb Larsson failed to control a header from Phil Bardsley's cross.
And the goal came in similar circumstances at the other end, Christian Benteke heading down Matt Lowton's floated centre for Agbonlahor to finish ahead of Carlos Cuellar.
Martin O'Neill sent on Louis Saha, whose flicked header cleared the bar, and home penalty appeals were given short shrift after John O'Shea's effort struck Benteke's arm.
Villa might have added a second on the break but for Weimann's weak finish, and Sunderland's last chance to grab a draw went wide of the post with Fraizer Campbell's injury-time header.