Spurs had looked in complete control of the match during the opening exchanges, particularly as they twice hit the woodwork. Firstly when Maya Yoshida deflected a Harry Kane cross against his own post and then, just minutes later, when Christian Eriksen's free-kick clipped the top of the crossbar.
Eventually, Tottenham's pressure told when on 26 minutes they deservedly took the lead as Kane lashed home from close range after the returning Dele Alli floated a perfectly timed pass over the top of the Southampton defence.
Southampton barely laid a glove on Tottenham during the first half and their manager Ralph Hasenhuttl made two changes at half-time with Josh Sims and Shane Long coming on.
Those alterations certainly had the desired effect as Southampton dominated the second period, with Long, Nathan Redmond and Pierre-Emile Hojbjerg all going close before the hour mark.
At one stage it looked like the hosts would regret missing so many chances, but they eventually drew level on 76 minutes, as right-back Yann Valery made it two goals in two games, converting Stuart Armstrong's pull-back that somehow dissected a static Spurs defence.
Spurs were left reeling after that and just five minutes later Southampton grabbed what proved to be the winning goal when James Ward-Prowse curled a superb free-kick, from fully 25 yards out, into the top corner - a goal worthy of winning any game.
Tottenham boss Mauricio Pochettino, who was watching from the stands due to his two-match touchline ban, brought on Fernando Llorente late on, but it was to no avail as Spurs failed to win for a fourth Premier League game in a row.
They now face a fight just to end the season in the top four, while Southampton have taken a giant step towards safety after recording back-to-back home wins in the league for the first time since December 2016.