Jan Bednarek's 18th-minute own goal gave Tottenham the lead but the visitors dominated the first half and deservedly drew level when Armando Broja fired home five minutes later.
Son Heung-min restored Tottenham's lead with 20 minutes remaining from Lucas Moura's pass but Southampton responded in superb fashion to stun the hosts.
Mohamed Elyounoussi headed them level in the 79th minute from a James Ward-Prowse cross and Ward-Prowse then produced another superb delivery for Che Adams to head home.
Substitute Steven Bergwijn thought he had rescued a point for Tottenham in stoppage time but his effort was ruled out for offside after a VAR check.
Tottenham's second successive league defeat left them in seventh place with 36 points, four points behind West Ham United albeit having played three fewer games.