Didier Deschamps's side entered the Group A clash two points behind leaders Sweden, but Les Bleus have now returned to the summit with just one match to play courtesy of a narrow victory in Sofia.
France took the lead inside the opening three minutes, with Blaise Matuidi finding the top corner from an acute angle after Antoine Griezmann's deft touch set up a shooting chance for the Juventus midfielder.
Bulgaria looked to hit back moments later when the ball fell for Todor Nedelev in an advanced area, but the midfielder's effort was always moving wide of the post.
Corentin Tolisso then sent one wide from distance in the 20th minute, before Griezmann curled the ball just past the far post six minutes later after being afforded all sorts of room inside the Bulgarian box.
Lacazette should have doubled France's lead just before the 30-minute mark after being found inside the box by Mbappe, but the Arsenal forward was denied by a brilliant challenge from Vasil Bozhikov.
France lost N'Golo Kante to a hamstring problem in the latter stages of the first period as Adrien Rabiot entered the field, and Bulgaria should have been level in the 36th minute when Hugo Lloris made a meal of a strike from Simeon Slavchev, but the Tottenham Hotspur goalkeeper somehow kept out a close-range header from Georgi Kostadinov.
Mbappe had the final chance of the first period after meeting a deflected free kick from Griezmann, but the Paris Saint-Germain attacker missed at the near post once again.
Spas Delev had the first half-chance of the second period after finding space outside the France box, but the striker curled his effort wide of the far post.
There was a distinct lack of quality in the 15-minute spell that followed, with both teams struggling to keep the ball.
The referee had to step in on a number of occasions to stop tensions boiling over, but chances were few and far between as the key Group A clash headed for its final 10 minutes at 1-0 France.
Dimitri Payet and Olivier Giroud came off the France bench in the latter stages, and the added experience came in handy as Deschamps's side held strong in the final moments to record a huge three points in Sofia.
France will host Belarus on Tuesday knowing that a win would secure their spot at the 2018 World Cup. Bulgaria, meanwhile, will round off their qualification campaign with a trip to Luxembourg on the same night.