Kevin Stewart opened the scoring and Kamil Grosicki added a second before Dan Potts put through his own goal in time added on.
After a scoreless first half, former Liverpool youngster Stewart rifled over from 20 yards and from his next attempt on 63 minutes, he was to break the deadlock, as Grosicki escaped on the left.
His cross saw Sonny Bradley challenge substitute Josh Magennis, only for the midfielder to fire the loose ball into the ground and beyond Simon Sluga.
The goal certainly buoyed City, and Grosicki’s snapshot from 20 yards was inches wide, while the previously-quiet Jarrod Bowen then curled over the top.
Back came Luton as James Collins was denied by the post.
Hull should have sealed the win with five minutes left, Bowen putting Grosicki in the clear, but from eight yards out he rolled wide of the target.
With three minutes to go, Hull made sure of the points when his time Grosicki did have his radar switched on, cutting in from the left and then beating Sluga at his near post.
It went from bad to worse for the hosts in the final minute, as they conceded a goal of pure comedy late on, Bowen racing away once more to have just Sluga in his sights.
The keeper did well to save, but then when trying to gather the loose ball, saw Potts decide clear the ball against him and it spun backwards and in.
Luton: Sluga, Bolton (Potts 76), Pearson, Bradley, Bree, Tunnicliffe, Shinnie, Brown (Mpanzu 64), Collins, Cornick, LuaLua (Moncur 64). Unused substitutes: Lee, Jones, Butterfield, Shea.
Hull: Long, Lichaj, Burke, De Wijs, Kingsley, Stewart, Bowen, Da Silva Lopes (Honeyman 66), Irvine (Batty 84), Grosicki, Eaves (Magennis 46). Unused substitutes: Tafazolli, Ingram, Bowler, Pennington.
Referee: A Madley (West Yorkshire).