Two goals inside the opening quarter of the match from Philippe Coutinho and Daniel Strurridge put the visitors in control at St Mary’s, but a stirring second-half fightback saw Saints take the three points.
Substitute Sadio Mané missed from the penalty spot just after half time, but he made amends 20 minutes later, scoring his third goal in three games against Liverpool this season.
Graziano Pellè then curled home a stunning effort inside the final ten minutes to level, before Mané won it late on with a low left-footed strike.
Ronald Koeman made just one change from the side that beat Stoke City last week, as captain José Fonte returned from suspension in place of Matt Targett, with Ryan Bertrand reverting to his more familiar left-back role.
Following a five-game suspension, Victor Wanyama was named on the bench, with Koeman keeping faith in midfield duo Jordy Clasie and Oriol Romeu.
The game’s first chance fell to Virgil van Dijk, but the defender couldn’t get enough of a connection on Steven Davis’s corner, as his header drifted wide of the target.
Shane Long was causing problems for the Liverpool defence with his pace, and moments after having a strong appeal for a penalty turned down, Dejan Lovren provided a crucial interception as the striker looked set to find the net.
But, just as he did in this fixture last season, Coutinho opened the scoring. The Brazilian’s curling effort, from a similar position to the one he netted 13 months ago, found its way inside the far corner, despite the best efforts of Forster.
Five minutes later, the visitors doubled their lead. An incisive break saw Divock Origi lay the ball off for Sturridge, who calmly slotted home under pressure from Bertrand.
Saints were getting caught on the break as they searched for a route back into the game, and but for an excellent stop from Forster to deny Joe Allen, it would have been three. The goalkeeper saved superbly with an outstretched foot to deny the Welshman.
Allen thought he had added a third just after the 30-minute mark, but Mamadou Sakho was adjudged to be interfering with play in an offside position – much to the relief of Saints.
Koeman made a double change at the break as Saints went in search of a way back into the game, with Mané and Wanyama introduced.
And the hosts were presented with a great opportunity to do just that five minutes after the restart, as substitute Martin Skrtel brought Pellè down in the box.
Mané stepped up to take, having scored in the two previous games against Liverpool this season, but goalkeeper Simon Mignolet made a good save, before Long fired the rebound wide.
Mignolet was at his best again in the 64th minute, as he tipped over Oriol Romeu’s fierce drive, but he could do nothing about Saints’ next effort on goal.
Pellè played the ball into Mané, who impressively created space to get a shot away, and fired the ball beyond the Belgian goalkeeper on his left foot to lift the St Mary’s crowd.
Saints continued to push, and drew level inside the final ten minutes as Pellè unleashed a terrific curling strike from distance that beat Mignolet.
And three minutes later, Saints completed a remarkable comeback, as Pellè released Mané and his low strike snuck just inside the far corner.
Koeman's celebrations emphasised just how important the goal was, as Saints held on to make it back-to-back league wins.
Southampton: Fraser Forster, Cuco Martina, José Fonte (c), Virgil van Dijk, Ryan Bertrand, Oriol Romeu (James Ward-Prowse 69), Jordy Clasie (Victor Wanyama 46), Steven Davis, Dušan Tadić (Sadio Mané 46), Shane Long, Graziano Pellè.
Unused substitutes: Maarten Stekelenburg (GK), Cédric, Maya Yoshida, Juanmi.
Goals: Mané (65 & 86), Pellè (83)
Booked: Mané (87)
Liverpool: Simon Mignolet, Jon Flanagan (c), Dejan Lovren (Martin Skrtel 46), Mamadou Sakho, Nathaniel Clyne, Emre Can, Joe Allen (Sheyi Ojo 87), Adam Lallana, Philippe Coutinho, Divock Origi, Daniel Sturridge (Christian Benteke 70)
Unused substitutes: Danny Ward (GK), Kolo Toure, Jordan Henderson, Brad Smith.
Goals: Coutinho (17), Sturridge (22)
Booked: Lovren (25), Can (48), Skrtel (49)
Referee: Roger East