Real Madrid striker Benzema was making his first international appearance since October 2015 in a star-studded starting line-up that also included Antoine Griezmann and Kylian Mbappe, who both found the net.
Mbappe opened the scoring from close range shortly after Benzema had his penalty saved by Danny Ward following Williams' handball – an infringement that also saw the Liverpool youngster sent off after a lengthy VAR check.
Fellow forward Griezmann doubled France's tally early in the second half and substitute Ousmane Dembele added a third as the world champion saw out the job in its penultimate match before beginning its Euro 2020 campaign.
Benzema had a glancing header well saved by Ward and the Wales goalkeeper was then equal to the returning striker's spot-kick with a little under half an hour played in Nice.
However, Wales was down to 10 men at that point as Williams was harshly sent off for deliberately handling the ball in front of goal when blocking Benzema's shot, coming after Ward had produced another stop to keep out Paul Pogba.
France made the most of the extra man seven minutes later as Mbappe got his boot to a loose ball first following Ward's low save to keep out Adrien Rabiot's deflected effort.
Griezmann gave the host some breathing space with a curled finish into the top-left corner with 47 minutes played after some nice link-up play with Mbappe.
Dan James was played in by substitute Aaron Ramsey and forced Hugo Lloris into a rare save, with that proving to be Wales' best chance of ending a run that now spans eight away friendly matches without scoring.
There was still time for France to add a third goal late on through Dembele's simple finish after Benzema's shot crashed back off the post and into his path.