The victory takes the reigning champions two points clear of Inter Milan, who were held to a 1-1 draw by Atalanta on Saturday, at the halfway stage of the season.
It was Ronaldo's 14th league goal of the season and ninth in his last six Serie A appearances.
Demiral had to go off after landing heavily on his knee, while winger Nicolo Zaniolo was carried off on a stretcher in tears after falling awkwardly.
Roma pulled a goal back on 68 minutes through a Diego Perotti spot-kick but were unable to find a leveller.
Sampdoria came from behind to storm to a 5-1 victory over fellow strugglers Brescia, while Giuseppe Iachini picked up his first win in charge of Fiorentina, winning 1-0 over bottom club SPAL, and Torino beat Bologna 1-0.
Elsewhere, Udinese were 3-0 winners over Sassuolo, while Verona triumphed 2-1 against Genoa at the Stadio Marc'Antonio Bentegodi, where kick-off was put back by 15 minutes to enable the groundsman to re-draw the lines around the penalty area after referee Maurizio Mariani decided they were not straight.
A point leaves Thomas Tuchel's side five points clear of closest challengers Marseille with one game in hand.
Nantes registered their first win at Saint-Etienne in 19 years in a match played behind closed doors at the Stade Geoffroy-Guichard following the pyrotechnics that marred the end of their match against PSG in December, prevailing 2-0.