The Briton, who finished outside the time limit in his previous participation in 2018, crashed out in 2017 and hinted at retirement last year. He is now three victories away from the Tour’s all-time stage win record held by Belgian great Eddy Merckx.
Cavendish, back in the Deceuninck-Quick Step team this season after a five-year hiatus, powered past his rivals in the final straight to beat France’s Nacer Bouhanni to the line.
Belgian Jasper Philipsen took third place while his Alpecin-Fenix team mate Mathieu van der Poel retained the overall leader’s yellow jersey.
“I don’t know what to say,” said a tearful Cavendish, who was a last-minute stand-in on the team for Irishman Sam Bennett.
“Just being here is special enough. I didn’t know I would get to come back to this race. I thought I was never coming back (on the Tour) honestly but the stars have aligned somehow. After last year it’s just nice to have some good luck.
“We didn’t know we were going to get there but we just see what a team this is. So many people didn’t believe in me but these guys do.”
They then rode the next 10 kilometers at a snail’s pace.
As the stage came to a conclusion, breakaway rider Brent van Moer was close to upsetting the sprinters. But he was caught by the charging peloton 150 meters from the line, with Cavendish producing a perfectly timed effort to snatch his 49th stage win on a Grand Tour in the town where he also prevailed in 2015.
Wednesday’s fifth stage is a 27.2-km individual time trial from Change to Laval, and all eyes will be on the overall contenders.
World champion Julian Alaphilippe, who has an eye on a potential podium finish in Paris after finishing fifth overall in 2019, is second, eight seconds behind Van der Poel. He will be hoping his last-kilometer effort to get Cavendish up into a good sprinting position will not cost him.
Colombian Richard Carapaz is third, 31 seconds off the pace with defending champion Tadej Pogacar a further eight seconds behind.
Carapaz’s Ineos-Grenadiers team mate Geraint Thomas, the 2018 Tour champion, lags 1:07 behind Van der Poel while last year’s runner-up Primoz Roglic is 1:35 off the pace.