Williams, ranked No. 5, recovered from a set down to end the eighth-ranked Garcia's run as the 37-year-old American became the oldest women's finalist at the year-end tournament with a 6-7 (3), 6-2, 6-3 victory over the Frenchwoman.
In the other semifinal, sixth-ranked Wozniacki of Denmark defeated No. 3 Karolina Pliskova of the Czech Republic 7-6 (9), 6-3.
Williams last took home the WTA title in 2008 and reached the final in 2009 before marking an eight-year absence from the event.
"Garcia has competed so well this whole tournament, and every time I thought I was getting close she played amazing," Williams said in her on-court interview. "It's not over 'til the fat lady sings -- but I'm not fat."
Williams holds a 7-0 winning career record over the 27-year-old Wozniacki.
"(In the final) I'm going to be playing against one of the best players in the tournament, and another Caroline. It's going to be like deja vu," Williams told the crowd, laughing. "But I'm really happy, she's a great friend and I'm really happy that one of us will win tomorrow."
Williams saved 12 of 13 break points and won four of nine break-point opportunities in the two-hour, 32-minute battle.
"I was missing a little bit of energy in the second and third set," Garcia said afterwards. "I mean, it was very intense -- this match -- and she played some great tennis. She was changing direction very well, she was aggressive. You know, I just missed a couple of short balls that I didn't make enough difference, and she passed me. But it was, I guess, very close."
Wozniacki improved her career record over Pliskova to 6-3 and she is 3-2 in meetings this year.
Wozniacki will make her first appearance in the championship match of the WTA Finals since 2010. She said she was looking forward to the final.
"I feel good," Wozniacki said. "I feel comfortable and confident, and, you know, regardless of who I play in the final, it's going to be a tough battle and it's going to be a tough match to win. But I'm excited to play and get another opportunity."
With Pliskova's loss, Simona Halep will retain the No. 1 ranking through to next year. The Romanian lost to Elina Svitolina on Friday, allowing Garcia to advance to the semifinals.
Pliskova, playing in the year-end semifinals for the first time, needed to win to return to the No. 1 ranking for a second time this year.
"Still everything a little bit improving," Pliskova said of her 2017 campaign. "Not with the big steps but with the small steps, which is good."