Williams, whose loss meant she failed to reach the final for the first time since 2006, was outplayed from the outset by the World No 82 and went down in an hour and 25 minutes on Court One.
"It's like a dream, coming here I never thought I'd play that well and come this far in the tournament," Pironkova said. "I think I played pretty well today, I'm very happy with my game.
"I have one win over her and thought I could win and I was going for it," said the 22-year-old who scored a three-set win over Venus at the Australian Open [ Images ] four years ago.
Williams saved two match points serving at 2-5 in the second set but Pironkova made no mistake on her own serve and sealed victory when a Williams forehand drifted wide.
She rolled onto her back in disbelief and covered her face with her hands before walking to the net after becoming the first Bulgarian woman to reach a grand slam semi-final since tennis turned professional.
Pironkova, the lowest ranked player left in the women's draw, will play Russian Vera Zvonareva for a place in Saturday's final.
Zvonareva, who claimed her first victory over Clijsters in six attempts, played her heart out to defeat Belgian Clijsters 3-6, 6-4, 6-2 on Tuesday.
The Russian 21st seed recovered superbly after Clijsters had taken the opening set in confident fashion after 38 minutes on Centre Court.
"I'm so excited about the match, definitely one of my dreams to be playing here in the semi-final," an elated Zvonareva said in a courtside interview.
"I remember as a kid watching Wimbledon on TV and I'm really looking forward to the semi-final."
The Russian, a semi-finalist at the Australian Open last year, broke serve twice to claim the second set and never looked like being reeled in by Clijsters, whose first serve and forehand buckled late in the match. The end came as Zvonareva broke the Clijsters serve yet again when the Belgian netted a straightforward forehand after an hour and 48 minutes.