The latest live show saw Craig win the public vote, with the judges having to choose between runners-up Jasmine - Ant and Dec's Golden Buzzer act - and Lucy and Trip Hazard.
David Walliams voted for Lucy and Trip after "falling in love" with the pooch, while Alesha Dixon and Amanda Holden both sided with Jasmine.
Simon Cowell's vote then gave Jasmine her place in the final after he congratulated her on improving on her audition.
Britain's Got Talent fifth semi-final results
1. Craig Ball (won public vote)
2. Jasmine Elcock (won judges' vote)
3. Lucy and Trip Hazard (lost judges' vote)
4. Presentation School Choir
5. The Togni Brothers
6. Elite Squad Royalz
7. Chloe Fenton
8. Anna and Fia Almanda
9. Deep Space Deviants
Elite Squad Royalz kicked off the night, with Alesha saying they were "on to a winner" with their Royal Family-themed dance routines, before Anna and Fia were called "very good singers" by Simon.
Comedy act Deep Space Deviants became the first contestant in this year's live shows to be buzzed off stage, with even David blasting their performance.
Amanda admired the "beautiful, controlled, gorgeous" performance delivered by Jasmine, while Lucy's dog Trip Hazard had Simon cooing: "He’s the most adorable little thing!"
The injury-hit Togni Brothers suffered a fall, but their "dynamic" foot-juggling still thrilled the panel - as did Craig's musical impressions, which Alesha said were "perfect for this show".
Chloe's energetic and "precise" dance moves left Amanda feeling "knackered", and the Presentation School Choir were described as "heavenly", "wholesome" and "a class act".
Craig and Jasmine join 100 Voices of Gospel, Mel and Jamie, Wayne Woodward, Alex Magala, Richard Jones, Boogie Storm, Beau Dermott and Balance Unity in the line-up for the final.
It will be completed by two 'wildcard' hopefuls - one chosen by the judges, and the other by viewers from the losing top three semi-final acts.
Britain's Got Talent 2016 concludes with its grand final on Saturday at 7.30pm on ITV.