Ligue 1 wrap: Lyon move first, Montpellier off the mark
Gomis scored from the spot and set up Lyon's third before Gregory Pujol's 76th-minute goal dragged Valenciennes back into contention and ensured a tense finale to Saturday's game.
The visitors struck first in Lyon as central defender Gil nodded a corner over Remy Vercoutre after the home side's goalkeeper misjudged a corner from Gael Danic in the 12th minute.
But just six minutes later another goalkeeping error allowed Lyon to equalise.
Valenciennes' Nicolas Penneteau came off his line to smother the ball at the feet of Michel Bastos, but the Lyon man won out and then slotted the goal from a tight angle.
Lyon led at half-time thanks to a 21st-minute penalty from Gomis after Alexandre Lacazette was brought down in the box.
The home side extended their lead in the 66th minute when Gomis laid the ball off for Clement Grenier, who smashed it home from outside the penalty area, and although Pujol decreased the margin to just one goal 10 minutes later, Valenciennes could not manage an equaliser and Lyon held on to win.
The victory sees Lyon move to the top of Ligue 1 with 10 points, although Marseille can regain the lead if they win on Sunday.
Lorient moved to third thanks to a 3-0 victory over Nancy with Ludovic Giuly, Lamine Kone and Alain Traore scoring the goals.
Reigning champions Montpellier secured their first victory of the season, defeating Sochaux 3-1.
Younes Belhanda scored the only goal of the first half to give Montpellier the lead at half-time away from home and 13 minutes after the break Emanuel Herrera made it 2-0 to last season's title-winners.
Sloan Privat got Sochaux back in the game with a 63rd-minute goal but Remy Cabella ensured Montpellier took the three points home when he scored in the 78th minute.
Elsewhere, Saint-Etienne smashed Bastia 3-0, Ajaccio defeated Evian 2-0, Brest knocked off Troyes 2-1 and Toulouse drew 1-1 with Reims.