Bulgaria took the lead in the ninth minute through Ivan Ivanov before the 19-year-old Shaqiri turned the Group G tie on its head and brought Switzerland within three points of second-placed Montenegro.
Just as the home team's qualification chances seemed to be evaporating, Shaqiri struck in the second minute of added time at the end of the first half to send the sides in level at the break.
The FC Basel midfielder doubled his tally in the 62nd, and the home team's cause was further helped when Bulgaria's Zhivko Maliv was sent off three minutes later.
Shaqiri completed his hat-trick in the final minute as Switzerland moved three points clear of the fourth-placed Bulgarians.
Switzerland travel to Wales on October 7th knowing that victory in that match would set up a mouthwatering final-day home tie with Montenegro four days later.
A second place finish for the Swiss would set up a two-legged qualification decider with the runners-up from one of the other Euro 2012 qualifying groups.
Group leaders England all but secured qualification for next summer's tournament as they opened up a six-point lead with a hard-fought 1-0 win over Wales at Wembley stadium.