After a relatively quiet first half - Lewis Holtby struck the post in the last minute - the game exploded into life in the second half.
Gareth Bale volleyed just wide, Clement Grenier was denied by Brad Friedel and Lyon goalkeeper Remy Vercoutre kept out a couple of Bale blasts from distance.
Clint Dempsey headed a chance over with 13 minutes remaining and as we ticked into the final minute, it looked like extra time was on the cards.
With the clock reading 89.30, the Belgian midfielder picked up the ball 30 yards from goal, shifted away from Gonalons and fired into the corner from 25 yards.
It was a goal worthy of winning any game on any stage and clinched our place in the last 16 of the competition where we'll lock horns again with Inter Milan over two legs, the first leg at the Lane on Thursday, March 7, the return at the San Siro a week later on Thursday, March 14.
Andre Villas-Boas made one change from last week's first leg with Holtby in for Dempsey. We started with a fluid 4-2-3-1 system with Bale floating around left to right and looking to support Emmanuel Adebayor.
We enjoyed plenty of possession in the first half - statistics showed 58-42 per cent in our favour at half-time - but chances were few and far between at both ends.
In fact, Lyon had the only three chances of the half - Gonalons' goal, Lisandro dragged wide from Alexandre Lacazette's cross on 32 minutes and Friedel comfortably saved Lacazette's effort on 43 minutes.
Our best effort came with the final kick of the half, and we were so close to levelling the score on the night. Dembele squared to Holtby 25 yards out and his low shot beat Vercoutre only to cannon back off the post.
The game shifted a gear as we started to push Lyon back in the second half.
Bale was narrowly off target from Adebayor's cross on 50 minutes but then two chances for the home side - Friedel denied Grenier with his feet from 12 yards and Lisandro failed to take advantage when the goalkeeper failed to clear, eventually going over in the box and penalty appeals were waved away.
Play switched to the other end as Vercoutre produced a flying punch to keep out Bale's free-kick and Adebayor looped a header onto the top of the crossbar. Bale then let fly from 40 yards and Vercoutre looked less than convincing, but kept the ball out.
Dempsey entered the fray on 66 minutes and had the next chance, rising well to meet Bale's corner but heading over from 12 yards.
We continued to apply the pressure but only seconds remained when Dembele delivered the tie-clincher, a sweet strike that sent players, management, staff and fans alike into raptures.
Spurs (4-2-3-1): Friedel; Walker, Gallas, Vertonghen, Assou-Ekotto; Dembele, Parker (Livermore, 85); Lennon (Dempsey, 66), Holtby (Sigurdsson, 74), Bale; Adebayor. Unused subs: Lloris, Caulker, Dawson, Naughton.
Lyon (4-2-3-1): Vercoutre; Reveillere, Bisevac, Lovren, Umtiti; Fofana, Gonalons; Lacazette (Malbranque, 65), Grenier, Lisandro (Ghezzal, 73); Gomis (Briand, 82). Unused subs: Lopes, Kone, Ferri, Dabo.
Yellow cards: Lyon - Grenier, Umtiti. Spurs - Walker, Gallas.
Goals: Lyon - Gonalons (17). Spurs - Dembele (90).
Referee: Mr W Stark (Germany).
Maxime Gonalons headed Lyon into the lead in the 17th minute to level the aggregate scoreline at 2-2.