Pompey twice fought from behind, but a late goal saw them leave League One leaders Luton empty-handed.
They were comfortably second best before the break and James Collins ensured the hosts went in ahead at the interval.
It was a different story in the second half, however, and the Blues dominated for long periods, with Ronan Curtis levelling.
Collins netted from the penalty spot to restore the Hatters’ lead, only for substitute Omar Bogle to equalise on his debut.
Both sides looked capable of grabbing a late winner, but it was George Moncur who struck in the closing stages to strengthen Luton’s advantage at the summit.
Kenny Jackett made two changes from the side that drew with Queens Park Rangers in the FA Cup at the weekend.
Bryn Morris was handed a debut in the centre of midfield, while Jamal Lowe made an instant return after completing a one-match ban.
Dion Donohue and Louis Dennis dropped to the bench, where they were joined by recent loan signing Bogle.
There was also a change of formation, with Anton Walkes moving into the centre of a three-man defence, as Lee Brown and Jamal Lowe were used as wing-backs.
The snow fell persistently throughout the contest, although it was not heavy enough to leave more than a dusting on the surface.
It was the hosts who started on the front foot and it continued that way for most of the opening 45 minutes.
There were plenty of dangerous balls delivered into the Pompey box, although the majority were dealt with.
One cross from Kazenga LuaLua – younger brother of former Fratton favourite Lomana – caused difficulties, but Andrew Shinnie’s shot was blocked by Jack Whatmough.
Craig MacGillivray kept out a long-range effort from James Justin, who had earlier seen his corner headed away by Brett Pitman.
Luke Berry then sent a dangerous low ball across the face of goal, but a sliding Collins could not shake off Matt Clarke to convert.
Luton were well on top of and after a spell of intense pressure, LuaLua’s angled drive was kept out by MacGillivray.
Berry was next to try his luck, with a shot from outside the box that fizzed narrowly past the post midway through the half.
The hosts went close again on 29 minutes, as Jack Stacey swung in a dangerous cross that Berry glanced just wide.
Pompey were not creating much at the other end, although a flick from Pitman found Curtis, who was crowded out before he could get a shot away.
The action was soon back down the other end of the pitch, however, and Alan McCormack’s attempt was just off target, while a heavy touch from LuaLua allowed MacGillivray to save.
But Luton finally made their pressure count on 39 minutes, as Collins collected LuaLua’s pass and neatly slotted home.
Pompey’s first shot came just before the break, although Gareth Evans slipped as he connected with the ball, which sailed over the bar.
Luton Town 1
Jackett made a double change at the start of the second half, with Bogle and Donohue replacing Pitman and Evans.
And the latter made an immediate impression with the visitors’ first shot on target, although James Shea was not overly troubled.
Bogle was also proving to be a real handful, using his strength to steal possession on a couple of occasions.
Pompey looked a different team than the one that had struggled to keep hold of the ball before the break.
And they found themselves back on level terms on 52 minutes, with Clarke getting into the box and Lowe teeing-up CURTIS to drill into the net.
They might have had another moments later when Lowe found Morris, whose fierce effort was tipped over by Shea.
The Blues were applying plenty of pressure and the ball had to be hacked clear when Shea parried clear an angled drive from Curtis.
Luton had a chance to retake the lead on 71 minutes, however, as a cleanly-struck effort from Justin was pushed over by MacGillivray.
But they were back ahead soon after, when referee Simon Hooper decided that Whatmough had brought down LuaLua in the box.
He pointed straight to the spot and Collins sent up to confidently fire the ball right into the bottom corner.
That only served to reinvigorate the visitors, though, and they were deservedly level when Lowe slipped a pass across for BOGLE to bundle home.
He came close to adding another soon after, but Shea managed to get down to his left to push the ball behind.
But there was late heartache as the game swung back in Luton’s favour following a disputed foul on Moncur by Walkes just outside the box.
It was Moncur who took the free-kick and he expertly bent a shot around the wall and into the net to seal victory for the hosts.
Luton (4-1-2-1-2): Shea; Stacey, Pearson, Bradley (c), Justin; McCormack; Mpanzu, Shinnie (Sheehan 88); Berry (Potts 73); Collins, LuaLua (Moncur 80)
Goals: Collins 39, 77 (pen), Moncur 86
Subs not used: Isted, Jones, Read, Tomlinson
Pompey (3-5-2): MacGillivray; Walkes, Whatmough, Clarke; Lowe, Evans (Donohue 46), Naylor, Morris, Brown; Pitman (c) (Bogle 46), Curtis
Goals: Curtis 52, Bogle 79
Booked: Donohue, Naylor
Subs not used: Bass, Burgess, Haunstrup, May, Dennis
Referee: Simon Hooper
Attendance: 10,078 (1,033 Pompey fans)