Nadal got home 3-6, 7-6 (7/3), 7-6 (9/7), 6-2 in three hours 37 minutes and now will play either Andy Murray or Roger Federer for a place in Sunday's final.
For long passages of the quarter-final on Rod Laver Arena, Nadal was struggling to put away the 22nd-seeded Dimitrov, and he needed a bit of luck at crucial stages to go through.
"I was so lucky, after saving set points in the third set," he said. "He just missed an easy forehand… Today was for me, so I'm so happy."
Nadal was playing after three-time defending champion Novak Djokovic was upset by Stanislas Wawrinka late on Tuesday, and there were times when he looked like becoming another casualty.
Nadal's serve, troubled by a large blister on his left hand, was shaky and he gave up seven double-faults, including two of them on break points.
But the 2009 Australian Open champion won through to his fourth semi-final in Melbourne and his 22nd in Grand Slams, while extending his winning streak to 10 matches.
Dimitrov, 22, who was bidding to become only the second Bulgarian to reach a Grand Slam semifinal, showed what an emerging talent he is to have Nadal under pressure for long periods.
Nadal's opening serve was broken and Dimitrov controlled the remainder of the set as the 13-time Grand Slam champion dropped his first set of the tournament.
Nadal began to test the legs of the young Bulgarian with some longer, physical rallies in the second set, but after breaking Dimitrov's serve he handed back the break with three double-faults in the third game.
The set went to a tiebreaker which Nadal comfortably won with an exquisite backhand flick across court to level the match.
But just when the top seed looked to be getting on top, after breaking the Bulgarian's serve in the fifth game, Nadal's shaky serve again cost him with a double-fault on break point.
Nadal fought off set point as the third set went into another tiebreaker and he was fortunate to survive after Dimitrov just missed a forehand winner to the corner on his first of two set points.
Nadal quickly seized the advantage to get to set point, and Dimitrov lost the set with an overhit forehand off a net cord.
Dimitrov was broken in the second game of the final set, after six deuces, on a Nadal backhand pass and the Spaniard went on to claim victory on his fourth match point.