Harry Kane's first-half goal looked likely to give the visitor all three points, as Mauricio Pochettino, serving a two-game touchline ban for confronting referee Mike Dean after losing to Burnley two weeks ago, watched from the stands.
But Yan Valery, who scored his first senior goal against Manchester United last week, scrambled home an equaliser with 14 minutes of normal time left before James Ward-Prowse's stunning free-kick snatched the win.
Some wayward shooting from Kane underlined a scrappy opening 20 minutes, before Maya Yoshida fortunately saw the ball strike the Southampton post when he cut out the England striker's cross.
Christian Eriksen then rattled the crossbar with a free-kick, but Kane at last broke the deadlock 26 minutes in, gathering Dele Alli's fine floated pass and slotting the ball beyond Angus Gunn for his 200th career goal.
Saints improved after the break and should have levelled through Nathan Redmond, the winger shooting into the side-netting after finding space to the right of Hugo Lloris' goal.
Redmond then wasted another good opening by clipping the outside of the net on the other side of the box, but Valery at last bundled in an equaliser when Danny Rose allowed Stuart Armstrong's cross to go through his legs.
Ward Prowse then completed the unlikely turnaround with a strike from 25 yards out that curled away from Lloris and into the net, just a week after a similar strike eluded David de Gea at Old Trafford.
Other Premier League results:
Huddersfield 0-2 Bournemouth
Leicester 3-1 Fulham
Cardiff 2-0 West Ham
Newcastle 3-2 Everton
Manchester City 3-1 Watford