"I knew it would be more difficult than yesterday," Halep told fedcup.com after registering a ninth successive singles win in the tournament that Romania have yet to win.
"It felt like playing at home, that was how I was able to fight to the end. I won it for the fans who came here."
Halep's win over Garcia, her sixth in seven meetings, took almost three hours to complete with the crucial break in the final set coming in the eighth game when the French number one served up back-to-back double faults.
"It's never over until it's over," said Halep who required treatment on her left thigh midway through the second set.
Irina-Camelia Begu has the chance to wrap up the semi-final when she faces Pauline Parmentier in Sunday's second singles.
The winners will face Australia in November's final.
Seven-time champions Australia made the championship match for the first time in 26 years by seeing off Belarus 3-2 in Brisbane earlier on Sunday.
First Australian Fed Cup final since 1993
Meanwhile, Australia powered into its first Fed Cup final since 1993 on Sunday with Ashleigh Barty and Samantha Stosur clinching the deciding fifth rubber in Brisbane against Belarusian pair Victoria Azarenka and Aryna Sabalenka.
Their battling 7-5, 3-6, 6-2 win set up a title match against either France or Romania in November.
Japan vs Netherlands
Elsewhere in the Fed Cup results on Sunday, Misaki Doi thrashed Bibiane Schoofs 6-3, 6-2 as Japan completed a 4-0 Dutch whitewash in the Fed Cup world group two relegation playoff.
The Netherlands, who just three years ago reached the Fed Cup semi-finals, slipped into the Europe/Africa group one after an abject display in Osaka.
Doi and Nao Hibino had put Japan firmly in control of the tie on Saturday, despite the absence of world number one Naomi Osaka.
World 104 Doi finished the job with a clinical performance against Schoofs, before Shuko Aoyama and Eri Hozumi added insult to injury for the Dutch by beating Lesley Kerkhove and Demi Schuurs 6-3, 3-6, 10-6 in the dead doubles rubber.
The final singles match was subsequently scratched.