Troy Deeney had put the hosts ahead after four minutes before Dušan Tadić and Nathan Redmond turned the game around before half-time.
Stafano Okaka levelled with 10 minutes to go, but two goals in two minutes from Manolo Gabbiadini and Redmond seemed to settle the game.
Abdoulaye Doucoure tapped home on 94 minutes to make it a nervy finish, but the Saints held on and move up into the top half of the table.
Deeney fires Hornets ahead early in game
Claude Puel’s side lost 3-2 last Sunday at Wembley Stadium and were looking to bounce back, but found themselves behind early against the Hornets.
A long throw-in into the box wasn’t dealt with, Okaka’s pass deflected back into the path of Deeney, who volleyed the ball into the corner of the net.
Walter Mazzarri’s side warranted their lead, but the game turned into an end-to-end affair and Okaka headed Jose Holebas’ corner over the bar on 24 minutes.
Four minutes later, the visitors levelled and a poor clearance was latched onto by Tadić and the midfielder slotted home well from 15-yards out.
Redmond puts Saints ahead at half-time
Fraser Forster was called into action just after the half-hour mark when he had to tip Holebas’ in-swinging corner behind ahead of the awaiting Younes Kaboul.
Tadić and Cédric Soares came close in the closing stages before the Saints struck a hammer blow and went ahead for the first time in first-half additional time.
A brilliant move forward saw Tadić play the ball back across to Redmond, who struck the ball home into the bottom corner.
After going ahead on the stroke of half-time, the Saints had the next opening just after the hour mark and came close to doubling their advantage.
Tadić’s cross was deflected behind for a corner, which was played out to the midfielder on the edge of the area, and his half volley was tipped over brilliantly by Heurelho Gomes.
Gabbiadini puts visitors ahead moments after Okaka equalised
The Brazilian ‘keeper was called into action two minutes later when Maya Yoshida directed Tadić’s cross to goals, and Gomes done well to push the effort away.
Both sides were pressing and searching for goals, and it was the hosts who struck next 11 minutes before the end – getting a deserved equaliser.
Isaac Success was played down the flank and released a cross into the box and Okaka met it inside the six-yard area and struck home.
However, the hosts weren’t level for long and the Saints were handed a slice of fortune and Gomes couldn’t handle Sofiane Boufal’s effort.
The Moroccan international’s shot bounced just in front of the ‘keeper, who spilled the ball and Gabbiadini was there to pounce and fire home.
Saints wrap up game despite late consolation
Puel’s side increased their advantage just two minutes later when Redmond drove at Sebastian Prödl and struck firmly at goal, and Gomes couldn’t handle the shot, which slipped into the net.
Bouffal struck into the side netting moments before the hosts gave themselves a glimmer of hope in the fourth minute of additional time.
Doucoure manage to bundle the ball over the line for the Hornets’ third goal of the afternoon, but it turned out to be too little too late in the end.