Toby Alderweireld had stuck through his own net before cancelling out his own goal at the other end, and Son buried a penalty at the second time of asking to put Spurs ahead at the break.
Engles, who had tripped Steven Bergwijn for the penalty, then made amends for his error with an equaliser, but his nightmare blunder allowed Son through to snatch the points with seconds to play.
Dan Kilpatrick was at Villa Park to run the rule over Jose Mourinho's side.
Hugo Lloris: 4/10
The Spurs captain was rooted to his line for Villa's opening goal and utterly unconvincing on corners all afternoon, including for the hosts' second. Needs to show more leadership.
Serge Aurier: 5/10
Tasked with shackling Jack Grealish, Aurier promptly fouled him twice in the first five minutes and was lucky to avoid a booking. He managed to be a little less dirty thereafter but this was another scatty defensive performance, barring one important late tackle, with none of his usual precision in the final third.
Toby Alderweireld: 4/10
Uncharacteristically jittery for the own goal and beaten by Bjorn Engels for Villa's second, making this Alderweireled's poorest display for some time. Went someway to making amends with a wonderful finish on the turn to equalise.
Davinson Sanchez: 6/10
The best of a bad bunch at the back, making a couple of vital interceptions to deny the hosts. Got a fortuitous assist for Son's winner after Engels' horror show.
Ben Davies: 6/10
Beaten too easily by El Ghazi for Villa's opener but made amends with a goal-line block to deny Douglas Luiz a second. Generally the sitting full-back but created a chance for Dele with a burst forward in the first half.
Eric Dier: 4/10
Starting in the League for the first time since December 22 (presumably with Grealish in mind), Dier was badly off the pace as part of the midfield three. Though tidy in possession, the contrast to the dynamism of Lo Celso and Ndombele was massive. Hooked for the Argentine after an hour.
Harry Winks: 6/10
With Dier rather than Lo Celso as a partner, Winks was less effective than in recent weeks and struggled to really influence the game at either end.
Dele Alli: 6/10
Dele had more than enough chances for a hat-trick but his finishing was poor. Unlucky to have two goal-bound efforts blocked in the first half but fluffed two 1v1s with Pepe Reina.
Steven Bergwijn: 7/10
Pacy, confident, direct, skilful, intelligent and hard-working. It's still early days but Bergwijn certainly looks the real deal. Won a vital penalty for Son's opener and troubled Villa's defence throughout.
Lucas Moura: 6/10
Lively and industrious but his decision-making was poor. Passed when he should have shot and went alone when he should have passed.
Heung-min Son: 7/10
Grabbed a dramatic stoppage-time winner to make it six goals in five matches and could easily have had four after forcing two saves from Reina. That said, his decision-making and finishing was still poor on occasion.
Giovani Lo Celso: 7/10
On for Dier for the final 30 minutes, Lo Celso made a difference, creating a chance with a sublime ball for Aurier and nearly setting up a late goal for Lucas with a corner.
Gedson Fernandes: N/A
Replaced Dele for the final 5 minutes as he continues to settle in.
Jan Vertonghen: N/A
On for Bergwijn in stoppage time after Son's winner.