The Hoops arrived in Rome at the summit of Group E after beating the Italian side last month but amid a shaky start they fell behind in the seventh minute when striker Ciro Immobile volleyed in a cross from Manuel Lazzari.
And in the fifth minute of added time at the end of a thrilling game, midfielder Ntcham, on for Ryan Christie, finished a counter attack to secure a 2-1 win.
It was Celtic's first win in Italy in 13 attempts and kept them top of Group E with a guarantee of European football after Christmas.
With two fixtures remaining Celtic have 10 points with Cluj on nine, Lazio on three and Rennes on one.
This was a sporting encounter played against a background of some controversy and acrimony.
The Curva Nord section of the ground was closed after Lazio's fans were found guilty of racist chanting during the 2-1 win over Rennes in October.
Both Lazio and Celtic were charged for fans' "illicit chants" in their meeting in Glasgow, with the Scottish champions also sanctioned for "illicit banners".
In addition, two of the 8,000 Celtic supporters who travelled to Rome had been stabbed on Wednesday night and security was tight in and around the stadium.
Jonny Hayes, Hatem Elhamed and Christie returned to the Celtic side which was set up to match Lazio but they were pinned back early before conceding.
When Lazzari curled in a cross from deep, the ball skipped off the head of Hoops defender Christopher Jullien and Immobile, totally unmarked, took no time in thrashing the ball past keeper Fraser Forster.
Celtic had to come out their shell and they did but in the 20th minute it took a timely tackle from defender Kris Ajer to thwart Immobile when he was left with only Forster to beat after skipping easily past Elhamed.
Then, only a brilliant block by Christie prevented Immobile testing Forster with another effort.
However, Celtic's foothold in the game became stronger and they went in at the interval level after a horror mistake by Francesco Acerbi, who let Mohamed Elyounoussi's pass slip under his foot and Forrest rifled in from an angle.
While the travelling fans celebrated, Forster saved a header from Sergej Milinkovic-Savic and then was bailed out when he flapped at the consequent corner, with Jullien clearing Felipe Caicedo's effort off the line.
However, it was Lazio who appeared more grateful to hear the half-time whistle and looked no more composed after the interval as a bullish Celtic side threatened to take the lead.
Lazio sent on Luis Alberto and club captain Senad Lulic for Jony and Lucas Leiva but there was little improvement.
There was a Lazio penalty claim in the 66th minute when Immobile's drive appeared to be blocked by the arm of Jullien but referee Tobias Stieler took no notice.
Play stretched further in the final stages. A corner from Alberto rebounded off the post before Celtic striker Odsonne Edouard failed to hit the target with a drive following a counter attack.
Forster made decent saves from substitute Valon Berisha, on for Denis Vavro, and Alberto before Ntcham took a pass from Edouard and chipped keeper Thomas Strakosha for the most dramatic of endings.