The unseeded Spaniard, 26, battled past the fourth seed in a tense 7-6 (10-8) 7-5 semi-final victory.
The two-time Grand Slam champion fought off four set points in the opener and twice came back from a break down in the second.
She will face American Sofia Kenin in Saturday’s final.
It is Muguruza’s first appearance in a Grand Slam final since she won the Wimbledon title in 2017.
Muguruza clinched victory with her second match point when a six-shot rally ended with Halep hitting a return into the net.
The way the world number 32 gritted her teeth and tightly clenched her fist as she celebrated illustrated how difficult a battle it was against the 2018 runner-up.
“I’m very excited to be in the final – it is a long way to get there,” said Muguruza, who also won the French Open in 2016.
“I wasn’t thinking I was down, I just thought keep going and knew I’d have an opportunity.
“I was hanging in there and fighting with all the energy I had.”
Muguruza slipped down to 36th in the world at the end of last year, a little over two years after she was ranked number one.
But she has looked close to her best in Melbourne, having reunited with former coach Conchita Martinez – the 1994 Wimbledon champion – at the start of the season.
Victories over Ukrainian fifth seed Elina Svitolina and Dutch ninth seed Kiki Bertens earlier in the tournament marked her out as a potential champion at Melbourne Park.
And she moved within one win of achieving that with a gutsy victory over Halep.
Muguruza did not allow her opponent to take her chances in the first set – fighting off two set points at 6-5 and two more in the tie-break – to earn a valuable lead.
Then, after losing serve for 2-1 and 3-2 deficits in the second set, Muguruza piled the pressure back on Halep, finally taking two of six break points on her way to winning the final four games.
On Saturday, she will bid to become only the third unseeded woman to win the Australian Open, after home player Chris O’Neil in 1978 and American great Serena Williams in 2007.