The two-time defending champion started poorly but after her racquet paid the price, she dominated the second set and emerged victorious from a tense deciding tie-breaker to win it 2-6, 6-3, 7-6 (8/6).
The 18-time Grand Slam-winner, seeking her third straight victory at the end-of-season championship, will play Halep in Sunday's final -- four days after her humiliating 6-0, 6-2 loss to the Romanian.
Halep continued her brilliant run in Singapore with a 6-2, 6-2 dismantling of Poland's Agnieszka Radwanska as the Singapore tournament's surprise package made it to the final on debut.
Williams, 33, said she would start out with "low goals" against Halep, after winning just two games in their group match -- her worst performance since she was 16.
More From This Section
"I'm excited. My goal is to win three games. That'll be my first goal. I'm going to go from there," joked Williams. "Hopefully I can hold serve. That would be good. Most of all, I hope to break once."
While Halep cruised, Williams' fourth win over Wozniacki this year, including the US Open final, was tough and it was the third time this season that she has been pushed to three sets by the resurgent Dane.
"I hate to lose a match when I have match point. It's hard to sleep. It's hard to function," she said. "I thought, 'Oh my God. She couldn't play any better."
"Then I hit the net cord and I was almost upset on it," Williams added.