Seemingly down and almost out at 1-4 in the third set, world number three Halep was roared on by a large and noisy set of Romanian fans to secure a remarkable 6-3, 3-6, 6-4 victory over the Ukrainian.
Halep said her win was "unbelievable".
"I didn't give up, I promised myself I would never give up against her again because I lost two matches very bad," said Halep.
It was her first win against the world number seven since 2017.
The Romanian will now play her 34th career final on Saturday against either Germany's Angelique Kerber or Belgium's Elise Mertens, who play in the second semi-final, also on Friday.
Results from the WTA Qatar Open in Doha on Friday (x denotes seeding):
Simona Halep (ROM x1) bt Elina Svitolina (UKR x4) 6-3, 3-6, 6-4