The striker scored in the fourth minute of injury time after West Brom goalkeeper Ben Foster brought down Matt Lowton to cap a dramatic derby.
It was Villa’s first league win since December – and Tim Sherwood’s first as boss – and ended a seven-game losing streak.
Saido Berahino looked to have earned a point for West Brom after he cancelled out Gabby Agbonlahor’s opener.
But Villa deserved the win and could have been clear by half-time after Fabian Delph hit the post and Agbonlahor had two efforts cleared off the line.
It moved them three points clear of the Barclays Premier League drop zone as West Brom remained 13th.
A late Sadio Mane strike earned Southampton a potentially season-defining 1-0 win against Crystal Palace as they ended their 387-minute wait for a goal.
This performance was a far cry from the impressive, swashbuckling Saints who wowed onlookers and confounded the doubters earlier in the season.
They toiled once again as a run of one win in five matches looked set to be extended, yet Mane’s late clipped effort saw Ronald Koeman’s men move to within a point of the top-four.
Steve Bruce and Gus Poyet were involved in a furious touchline exchange as relegation rivals Hull and Sunderland drew a bitter encounter 1-1.
Black Cats boss Poyet was sent to the stands in the first half after protesting a decision to book Jack Rodwell for diving but took a ten-yard detour to confront his opposite number.
The pair exchanged angry words and sarcastic gestures, leaving Bruce apoplectic and physically restrained by assistant referee Stuart Burt as he lunged toward the Uruguayan.
The incident was the biggest flashpoint on an ugly night at the KC Stadium, which also took in chants in support of suspended Sunderland winger Adam Johnson and a litany of nasty challenges.
Only rarely did a game of football threaten to break out, with Dame N’Doye producing a rare moment of class with a wonderful improvised opener and Rodwell equalising with a header in the 77th minute.