Paulo Fonseca’s side dominated most of the game, but relied on a Thomas Strakosha error for Edin Dzeko’s opener, before Pau Lopez was at fault for Francesco Acerbi’s equaliser.
Roma went in front after 26 minutes when Strakosha came for a cross but was beaten to it by Dzeko, who headed into an unguarded net.
Lazio were hanging on for dear life as two desperate defensive blocks prevented Roma getting a second just two minutes later, but they were handed a lifeline after 34 minutes thanks to a Pau Lopez blunder.
A Lazio corner was headed high into the air by Davide Santon, and Lopez punched it back into the air instead of catching it, before getting in a mix-up with Smalling as it came back down, allowing Acerbi to prod in from close range.
Lorenzo Pellegrini almost put Roma back in front on the brink of half time when his curling effort clipped the outside of the post.
The Giallorossi fans were celebrating when they were awarded a penalty early in the second half for a Patric trip on Justin Kluivert, but referee Gianpaolo Calvarese overturned the decision following a review on the pitchside monitor.
Strakosha made amends for his earlier error with two good saves on Dzeko efforts in the second half, but Lazio had some chances of their own as Ciro Immobile blasted over from a good position and Sergej Milinkovic-Savic drilled a low shot narrowly wide.