Wayne Rooney scored twice as Manchester United reduced the deficit on leaders Chelsea to six points.
Rooney gave United an early lead, deftly diverting Gary Neville's cross past Pompey's Konstantinos Chalkias.
Cristiano Ronaldo missed from six yards before Gary O'Neil spectacularly equalised with a long-range strike.
But Rooney latched on to Ruud van Nistelrooy's pass with 10 minutes left and superbly slipped the ball past Chalkias from eight yards.
With Arsenal only picking up one point at Southampton the win also extends United's lead over the Gunners to four points - although for a while it seemed as though Pompey would hold out for a draw.
United manager Sir Alex Ferguson rested several key players and might have regretted his decision after an injury to Gary Neville resulted in a central midfield combination of Alan Smith and John O'Shea for a period of the second half.
Most notable for his absence was goalkeeper Roy Carroll, who was dropped from the squad following his blunder against AC Milan.
Van Nistelrooy, though, followed up his substitute appearance against Milan with his first start since 27 November.
And United quickly found their rhythm, dominating possession after taking an early lead.
Van Nistelrooy might have been favourite to connect with Gary Neville's cross, but once the Dutch striker failed to make contact under pressure from Arjen de Zeeuw, the ball ran on to Rooney, who hooked it home with his first touch.
It was a superb piece of anticipation from the 19-year-old, who has now scored in his last three Premiership games.
But the anticipated avalanche of goals failed to materialise, though United should have doubled their lead shortly before the break.
Rooney's deep cross from the left found Gary Neville, who laid the ball to the unmarked Ronaldo - but the Portugal international shot over on the volley from six yards.
Pompey had battled manfully to keep the deficit to one goal and almost scored when De Zeeuw headed wide from a corner.
But the visitors did stun a record Premiership crowd of 67,989 at Old Trafford minutes after the restart, O'Neil's viciously swerving shot from 25 yards defeating Howard's outstretched arm.
United struggled to reassert their superiority and Ferguson introduced Ryan Giggs in a bid to wrestle back control of a game that became scrappy after the break.
The veteran winger's first contribution was a free-kick that curled wide of Chalkias' goal.
United were struggling for fluency and a draw seemed increasingly likely until Rooney's winner.
His first touch took him past Dejan Stefanovic and he held off from shooting until Chalkias committed himself before slotting home.
Manchester United boss Sir Alex Ferguson
"Wayne Rooney was fantastic. He was by far our best player - absolutely magnificent.
"Wayne picked up the baton for us and ran to the line. He was on song for us throughout the whole game.
"Ruud van Nistelrooy was terrific as well, and his pass for Wayne's second was an absolute killer."
Portsmouth coach Joe Jordan
"It looked as though we were going to get a deserved point.
"Conceding a goal made it far more difficult but we settled down, got ourselves back into the game and played some football and deservedly equalised.
"We contained them quite well but we switched off for a vital second and they showed some quality with Rooney scoring two good goals."
Man Utd: Howard, Gary Neville (Smith 45), Brown, Silvestre, Heinze, Ronaldo, O'Shea, Scholes (Giggs 65), Phil Neville, Rooney, van Nistelrooy (Fortune 85).
Subs Not Used: Saha, Ricardo.
Booked: Phil Neville.
Goals: Rooney 8, 81.
Portsmouth: Chalkias, Griffin, Stefanovic, De Zeeuw, Taylor, Stone, Skopelitis, O'Neil (Kamara 84), Hughes (Mezague 54), Yakubu, LuaLua.
Subs Not Used: Hislop, Primus, Fuller.
Booked: Taylor, Griffin.
Goals: O'Neil 47.
Ref: M Halsey (Lancashire).