Cymru Alliance side Caernarfon went ahead when Stuart J Jones put through his own net before substitute Lee Hunt equalised.
Late goals from Kieran Smith and Hunt sealed Bala's place in the final for the first time in their history.
Saints beat Gap Connah's Quay 3-0.
Adrian Cieslewicz broke the deadlock with 19 minutes remaining at the Bangor University Stadium, firing into the roof of the net from Jamie Mullen's cross.
Aeron Edwards doubled the lead three minutes later before Mullen sealed the victory with nine minutes remaining as Saints reached their fourth successive final.
Saints, who have already secured the Welsh Premier League title and Nathaniel MG League Cup, remain on course for a third successive domestic treble.
With Saints having qualified for the Champions League, Colin Caton's Bala will play in next season's Europa League irrespective of the result in the Welsh Cup final.
Bangor University Stadium will host this season's final on Sunday, 30 April with a 14:00 BST kick off.
Bala Town will face holders New Saints in this season's JD Welsh Cup final after coming from behind to beat Caernarfon Town 3-1 in the semi-final at Rhyl.