The hosts took the lead in the ninth minute when Anwar El Ghazi's deflected cross was diverted into his own net by Toby Alderweireld.
The Belgian then scored at the other end on 27 minutes, firing into the roof of the net from close range.
Spurs were awarded a penalty at the end of the first half after the Video Assistant Referee ruled that Bjorn Engels had fouled Steven Bergwijn.
Son's spot-kick was saved by Pepe Reina, only for the South Korean to poke in the rebound.
Engels equalised after 53 minutes, heading in from Jack Grealish's corner.
Reina made a succession of saves but in the final moments Engels miscontrolled a long pass, allowing Son to race through and calmly slot past the Spaniard.
Spurs are up to fifth position with 40 points, one behind fourth-placed Chelsea.
Villa stay 17th with 25 points.
Aston Villa: 22 Feb v Southampton (A)
Spurs: 22 Feb v Chelsea (A)