The Toffees - looking to bounce back from the Boxing Day defeat to Sunderland that had ended their hopes of going through the whole calendar year unbeaten at Goodison Park in the Barclays Premier League - went ahead in the ninth minute when Seamus Coleman burst into the area and finished with a powerful strike.
Saints substitute Gaston Ramirez equalised in the 71st minute, beating Toffees goalkeeper Joel Robles, who it appeared should have done better in his attempt to save the effort, with a shot from distance.
The three points mean Roberto Martinez's side are - for a few hours at least - up a place to fourth in the table, while Southampton remain ninth.
Martinez made five changes to his starting line-up from the surprise Sunderland loss, with some of them enforced.
Captain Phil Jagielka was missing due to what the club confirmed was a hamstring injury, so defender Antolin Alcaraz came in for his Toffees debut.
Goalkeeper Tim Howard and midfielder Gareth Barry were also absent having picked up a red card and fifth yellow card of the season in the Sunderland match respectively.
Howard's replacement was Robles, making his first Everton Premier League start.
But while there were some key men not in the side, the Merseysiders were boosted by the return of full-back Leighton Baines, who had sat out the past six matches after suffering a broken toe.
And Everton certainly looked no weaker than usual in the early stages as Coleman's third goal in four games fired them into the lead.
The Republic of Ireland international collected the ball from Leon Osman, advanced down the right flank and then cut into the box, beating James Ward-Prowse in the process, before unleashing an emphatic effort beyond Kelvin Davis and into the net.
In the 18th minute, Steven Naismith chased a long ball over the top and, as Davis caught it, went to ground in the area having felt contact from Dejan Lovren, but no penalty was given.
Some nice build-up play from Southampton then saw Adam Lallana's clever flick tee up Rickie Lambert, who brought a save out of Robles, but the assistant referee's flag was raised which replays suggested was an incorrect decision.
Luke Shaw sent a tame effort across the face of Robles' goal moments later, and both sides struggled to create anything truly incisive for the rest of the first half, with Lukaku failing to make the most of one particularly decent-looking opportunity to send a cross in.
Having juggled the ball away from Sylvain Distin and Osman on the edge of the area, Lallana dragged a shot wide, Ward-Prowse looped another off-target and, at the other end, Naismith looked to get his head to a delightful Baines free-kick delivery but Southampton cleared.
In the opening seconds of the second half Shaw made a run down the left and played a good ball into the danger zone, where a touch from the sliding McCarthy ensured Lallana could not finish.
Bryan Oviedo - booked moments earlier for a sliding challenge on Calum Chambers - then laid the ball to Ross Barkley, who side-footed wide right in front of goal.
Southampton looked to apply pressure once more and after a Jay Rodriguez shot deflected behind off McCarthy, Robles spilled a cross before smothering the ball with Lambert lurking.
And there was another suspect moment for Robles soon after as Ramirez collected the ball from Lallana and sent a dipping effort goalwards that seemed to fly right through the Spanish goalkeeper on its way in.
Robles will have surely been relieved to have seen Everton's advantage restored three minutes later.
Having received the ball from substitute Steven Pienaar as the Toffees swept forward, McCarthy neatly set up Lukaku, who smashed it home past Davis.
Lukaku sent an attempt over soon after and with Southampton desperately looking to salvage something, Shaw then did likewise.
In the last few minutes Lukaku might have added another for Everton, but saw his shot saved by Davis.