Third seed Halep looked to be heading out after going a set and 5-1 down.
But the Romanian won five consecutive games and then saved match point to take it to a decider, which she finished off with ease.
Halep will play Karolina Pliskova in the last four, after the world number three beat Caroline Garcia 7-6 (7-3) 6-4 in Wednesday's other quarter-final.
Garcia, 23, was the last French hope remaining in both the men's and women's singles draw.
The world number 28 put up a decent fight to take the first set against second seed Pliskova to a tie-break, but the 2016 US Open finalist proved too strong.
Unseeded Latvian Jelena Ostapenko will take on Timea Bacsinszky in Thursday's other semi, meaning there will be a first-time Grand Slam women's singles champion crowned in Paris.
Fifth seed Svitolina looked set to become the first Ukrainian woman to make a semi-final in Grand Slam history, as she stormed ahead in the opening stages against Halep - a runner-up in Paris in 2014.
She allowed her opponent just four winners in the first set and was four games to the good in the second before the Romanian's remarkable turnaround.
Svitolina served for victory at 5-2 and 5-4 before wasting a match point at 6-5 in the tense tie-breaker.
"I don't know how I came back," said 25-year-old Halep, who won 12 of the last 13 games on Suzanne Lenglen Court and served out the match with an ace.
"She was playing tough, hard and strong. Maybe I was a little lucky but I didn't give up."
Pliskova, 25, will replace Angelique Kerber as the new world number one if she beats Halep to make Saturday's final.
"It was very tough. She played very well, we were both serving well," said Pliskova after reaching her first semi-final in Paris.
"She [Garcia] played a great tournament, even today, it was 50-50, it came down to about two points. I'm really glad I made it.
"I am very happy. Before the tournament I wasn't sure if I could play good tennis on clay."
Simona Halep battled back to beat Elina Svitolina 3-6 7-6 (8-6) 6-0 in the French Open quarter-finals.