The sixth-seeded American will meet Elina Svitolina in the final after beating Karolina Pliskova 0-6 6-4 6-1 in Singapore.
The Czech was quickly into her stride, coasting through the opening set in 31 minutes, and continued her dominance by taking the first two games of the second.
Stephens through to semi-finals in Singapore
But then the fightback started as Stephens reeled off the next three games before Pliskova broke back to level at 3-3.
Stephens broke back immediately and served out to take the set 6-4 and level the match.
The deciding set started with a pair of breaks but then Stephens took over, winning the next five games to secure victory in two hours and 27 minutes.
“I came out here a little bit nervous, and I wasn’t really feeling the ball,” Stephens said after the match on court.
“Obviously, I knew playing Kaja [Pliskova] was going to be a really tough match. I mean, when you say you’re going to ‘give someone a lesson’ – she was absolutely working me today.
“I had a bit of an adrenaline dump after I finally won one game – I was really fired up, so I was like ‘come on, let’s do this. I can win one game, maybe I can win two, then three.’ And I just started to feel the ball a little better.
“Again, all credit to her. I just tried to stay in it, and get as many balls back as I could. I’m just really proud of my fight today.”
Earlier, Svitolina reached the biggest final of her career as she overcame Kiki Bertens in three sets.
The number six seed wore down Bertens to advance with a 7-5 6-7 (5) 6-4 victory in two hours and 38 minutes.
Image credit: PA Sport
Svitolina broke in the fourth game to take a 3-1 lead, but Bertens immediately broke back before the Ukrainian secured the opening set 7-5 on her first set point.
Bertens battled back as she broke in the opening game of the second set but Svitolina took the 10th game to make it 5-5 before taking the set into a tie-break and Bertens levelled the match.
The pair shared breaks to start the third set before Svitolina secured the decisive break at 2-1 and served out to take the longest match of the tournament.
“It was such a tough battle today and I’m very happy I could win in the end. It means a lot to me,” Svitolina said on court after the match.
“I think physically, in the end, it was just about running and chasing every ball down. I think the level was very tough and we were both playing very good tennis. I’m very pleased that I could stay in the match and close it.”
Wozniacki reveals battle with rheumatoid arthritis
Pliskova eases past Kvitova to book semi-final berth