The hosts converted all of their spot-kicks in a dramatic finale at the Kassam Stadium as Karl Robinson’s side booked a place against Wycombe at Wembley next Monday.
Pompey led through Marcus Harness’ 38th-minute strike and had good chances to score more.
But in the third and final minute of first-half stoppage time Ellis Harrison scored an unfortunate own-goal after a defensive mix-up with goalkeeper Alex Bass.
And after both sides drew a blank in extra-time, the second leg went to the wire with spot-kicks.
But McGeehan saw the eighth penalty brilliantly saved by Eastwood to leave it advantage Oxford.
Ollie Hawkins made it 4-4, but Brannagan won it with a clinical finish to put Oxford within one win of promotion to the Championship.
Jamie Mackie started for Oxford and nearly made an immediate impact as they came flying out of the blocks.
The experienced striker forced a smart save from Bass after only four minutes and shortly afterwards James Henry rifled well wide for the hosts.
But Portsmouth grew into the game and Harrison headed just wide from a Ryan Williams cross.
Elliott Moore headed over from a Henry cross as the contest opened up, but Eastwood was then forced to make a smart save to deny Harrison from close range.
Marcus Browne, who bagged Oxford’s equaliser in the first leg, burst into the box and Bass did well to gather the Middlesbrough loanee’s stinging low drive.
Pompey took the lead seven minutes before the break with a route one counter-attack which caught the U’s cold.
Harness collected a Harrison flick and fired the ball into the bottom-left corner.
Henry tried an ambitious long-range effort moments later as Oxford looked for an immediate response, but his shot was well wide.
The home side did equalise in the dying seconds of the first half after a horrible mix-up between Bass and Harrison.
Henry’s corner should have been easy to deal with, but poor communication saw Bass miss his attempted punched clearance and Harrison collided with the keeper as the ball flew into the empty net.
Henry blazed well over just before the hour after a cagey opening following the resumption, while Ronan Curtis shot well over with a long-distance free-kick.
Marquis came agonisingly close to putting Pompey ahead in the 69th minute, but his header from a Curtis cross struck the outside of a post.
Goalscorer Harness curled a powerful right-foot shot narrowly over as Pompey pressed for a late winner and Marquis shot just wide in extra time.
But it was Brannagan who scored the decisive penalty to win it for Oxford.