Casimir Ninga, the Chad international forward, was the hero for the visitors scoring twice after an early own-goal from Max Gonalons had rocked Lyon.
Hubert Fournier's side, beaten 3-0 by Nice in their last Ligue 1 match, remain in second place in the Ligue 1 table but leaders Paris Saint=Germain look out of reach now, 13 points ahead.
Montpellier took the lead in the eighth minute thanks to Gonalons' own goal, when he turned Jerome Roussillon's centre into his own net.
Four minutes later Ninga doubled the lead after punishing Lyon on the counter-attack.
It looked like being a difficult night for Lyon but less than two minutes after the second goal, Alex Lacazette reduced the deficit for the home side following a corner-kick routine.
Three minutes after the restart, Ninga struck again for only his third goal of the season.
Lyon's hopes of another fightback were effectively ended by Souleymane Camara who grabbed Montpellier's fourth 10 minutes from time. Rachid Ghezzal's excellent strike restored some pride to the home side but it was too little, too late.