With Cristiano Ronaldo on the bench, the champions struggled to create any real openings until Adrien Rabiot scored a rare Serie A goal, firing into the roof of the net from a tight angle six minutes before the break to level.
Sergej Milinkovic-Savic almost put Lazio back ahead but was denied by the crossbar, and Juve capitalised by edging ahead through a fine Morata finish in the 57th minute.
Afterward, Juventus coach Andrea Pirlo said he had reached an agreement with Ronaldo in the week leading up to Saturday's match.
"He came from eight or nine consecutive games, we made an agreement during the week [for Ronaldo to be rested], it was already planned," Pirlo, whose side will look to overturn a 2-1 deficit in their Champions League last-16 clash with Porto on Wednesday, told Sky Sport Italia.
"Cristiano is an added value, the boys have done what they had to do tonight without him. Cristiano has already scored 20 goals, it was normal that others also scored."
Lazio were looking comfortable with their first-half lead before Rabiot's equaliser, but the defending for Juve's second was poor and Milinkovic-Savic's clumsy tackle on Ramsey to concede the penalty for the third goal was needless.
"To win here you need to be perfect and we did it in the past," Lazio coach Simone Inzaghi said. "We had a good match but with too many mistakes, and Juve does not forgive.
"By playing like this but by limiting mistakes we will win again."
Milan and Inter are in action on Sunday and Monday respectively.
A third defeat in four league games dented Lazio's top-four hopes, with Inzaghi's men down in seventh on 43 points, six behind fourth-placed Atalanta.