The runaway leaders took a two-goal advantage into half-time at the Parc des Princes thanks to strikes from Angel Di Maria and Kylian Mbappe, and Marcal then comically put into his own net to further extend PSG's advantage following the restart.
But Thomas Tuchel's men were in trouble by the time of Cavani's 76th-minute introduction, Martin Terrier and Moussa Dembele scoring in quick succession as Lyon roared back.
PSG held on in tricky, windy conditions, though, and added a fourth through record goalscorer Cavani, with just his second touch, to ensure an eighth win in a row in all competitions and a healthy gap to second-placed Marseille.
Anthony Lopes thwarted Mbappe early on but was soon caught out by Di Maria, the PSG ace cutting inside from the right past Marcal and finding a gap at the near post.
Mauro Icardi then had a delightful chipped finish ruled out for offside, but there was to be no denying Mbappe, who delicately lifted the ball over Lopes when a desperate Marcelo lunge failed to cut out Thomas Meunier's centre.
PSG had another goal disallowed just before half-time, with Icardi again marginally offside before teeing up Mbappe to tap in, but their third arrived 89 seconds into the second half.
Meunier's initial cross was cut out by Thiago Mendes but his second was rifled into the net in farcical fashion by Marcal just inside the six-yard box with no PSG player nearby.
Lyon pulled one back against the run of play as Terrier's shot squirmed under Navas, before Dembele rounded off a slick team move - teed up by influential substitute Karl Toko Ekambi - to leave PSG sweating.
The visitors were without Memphis Depay and Maxwel Cornet but should have been level after 63 minutes, only for Dembele to fire off target from a glorious position.
Cavani made certain of the points three minutes after being introduced from the bench, though, his clinical finish a first goal in all competitions since the January transfer window closed.