A largely insipid encounter came to life in the closing stages, as the Blues struck twice in stoppage-time to spark scenes of joy inside Fratton Park.
The Grecians took the lead through skipper Jake Taylor, only for Marcus Harness to equalise with four minutes remaining.
There was still plenty more action to come, though, and it was the League Two visitors who seemingly grabbed a winner through an unfortunate Christian Burgess own-goal.
But a lovely strike from Cameron McGeehan brought Pompey level once more and, with a penalty shoot-out looming, John Marquis nodded the winner.
Kenny Jackett made two changes from the side that beat Shrewsbury in the league a few days earlier.
Ross McCrorie was handed a first start of the calendar year, with Ben Close also returning, as James Bolton and Gareth Evans made way.
In scenes reminiscent of Storm Dennis at the weekend, the ground was lashed by wind and rain ahead of kick-off.
But that had passed by the time the action started and the hosts made a bright start, looking to attack their opponents from the off.
Ronan Curtis sent in a low centre that was just out of reach for Ellis Harrison and Joel Randall did well to react before McGeehan could pounce.
Harrison – surrounded by two players – then did brilliantly to bring down a long pass and feed Curtis, who could not keep his angled strike down.
But the Blues striker was forced off midway through the first half, having already received treatment on the pitch.
He valiantly tried to carry on playing, but eventually hobbled off and was replaced up front by Marquis.
The action soon died down and there was not much to excite a healthy crowd at either end of the pitch.
Exeter’s best opportunity came when Jayden Richardson collected a lofted pass and twisted his way into a shooting position, but Close came to the rescue with a key challenge.
The Blues picked up as the interval approached and Curtis nipped in to steal possession, but could not quite cut the ball back for the waiting Marquis.
Exeter City 0
The hosts were slow to get going once the action restarted, with the Grecians appearing to settle quicker.
But they did not have much to show for their endeavour, apart from a booking for Alex Fisher following a lunge at Burgess.
And Pompey then started to move through the gears, with a couple of Steve Seddon corners not fully dealt with.
The left-back then sent in a fine cross from the left that Marquis thought he had forced just over the line, although the officials disagreed.
McGeehan soon saw a downwards header only partially cleared and skipper Tom Naylor fired the loose ball wide.
Jackett made his second change of the night soon after, with Close withdrawn and replaced by Oli Hawkins.
Exeter were relying on nefarious methods to keep their opponents at bay and Gary Warren was shown a yellow card for cynically preventing Marquis from breaking clear.
But the visitors might have broken the deadlock on 63 minutes, only for Naylor to throw himself in the path of Lee Martin’s shot.
Tom Parkes then wasted a decent opportunity from the resulting corner by hooking the ball high over the bar.
Pompey were pushing forward in search of an opener, with Hawkins looking a particular threat, but were just lacking that final bit of quality in the final third.
The breakthrough almost came on 71 minutes, only for Lewis Ward to make a sensational stop to stop Hawkins from converting Harness’ low centre.
A goal appeared to be getting closer and Harness then fired inches wide after being teed-up by McGeehan.
But it was Exeter who went ahead with 11 minutes remaining after Sean Raggett had diverted a shot narrowly past his own post.
Alex Bass was unable to get to the resulting corner and the ball fell for Taylor to lash into the net from 12 yards.
The stunned Blues tried to hit back and Curtis immediately dragged a shot off target from the edge of the area.
And they did have a leveller moments later, after Marquis had initially appeared to see a pass go beyond him.
But the striker got hold of it and squared for Curtis, with his shot cleared from the line by Parkes and HARNESS following up to slam home the rebound.
It seemed like the hosts were the more likely side to score again and avoid a penalty shoot-out, but there was still time for plenty more twists.
Exeter thought they had a winner when Randall’s low delivery was inadvertently sliced into his own net by Burgess.
But the Blues kept fighting as the contest entered stoppage-time and McGEEHAN lifted a fine shot over Ward and into the net.
And with five additional minutes already up, Naylor found acres of space to surge forward and pick out Curtis.
The winger expertly brought the ball down and sent in a superb cross from the left that was nodded in by MARQUIS.
There was not time for any more drama and the whistle soon blew, leaving fans to start singing about Wembley.
Pompey (4-2-3-1): Bass; McCrorie, Burgess, Raggett, Seddon; Naylor (c), Close (Hawkins 54); Harness, McGeehan, Curtis; Harrison (Marquis 24)
Goals: Harness 86, McGeehan 90+2, Marquis 90+6
Subs not used: MacGillivray, Bolton, Whatmough, Brown, Williams
Exeter (3-4-1-2): Ward; Dyer, Warren, Parkes; Richardson, Taylor (c), Kite, Randall; Martin (Williams 72); Law (Collins 80), Fisher (Seymour 68)
Goals: Taylor 79, Burgess 89 (og)
Booked: Fisher, Warren
Subs not used: Thompson, Moxey, Holmes, Jay
Referee: Craig Hicks
Attendance: 14,735 (366 away fans)