Vardy was only fit enough for the bench after a calf injury, but Brendan Rodgers sent the Leicester striker on with 30 minutes left and he responded with his sixth goal of the season.
The 33-year-old has made a habit of tormenting Arsenal and has now scored 11 goals in 12 Premier League games against them.
Leicester climbed up to fourth place after ending a run of two successive league defeats.
Arsenal are languishing in 10th after a second consecutive league loss following their 1-0 defeat at Manchester City last weekend.
Gunners boss Mikel Arteta will have been disappointed by his team’s lack of cutting edge.
The principle problem is a sudden dip in form for captain Pierre-Emerick Aubameyang.
The Gabon forward is without a goal in his last five league games, although he did net against Rapid Vienna in the Europa League on Thursday.
Aubameyang has scored just once in the league this season, hardly the kind of form Arteta would have hoped for after handing him a lucrative new contract in September.
Arsenal’s ability to challenge for a top four place rests on Aubameyang leading the charge and so far this term he has been a flop.
Arteta handed a home debut to Thomas Partey as he recalled a host of first-team regulars following the victory in Vienna.
Arsenal goalkeeper Bernd Leno had played in Vienna and was at fault for the goal his side conceded.
The German looked shaky again and nearly gifted Leicester the lead inside the first two minutes.
Leno came dashing way off his line but his attempted clearance went straight to James Maddison and the midfielder’s 40-yard effort went just wide.
Alexandre Lacazette headed in from an Arsenal corner moments later, but the goal was disallowed for offside against Granit Xhaka.
Arsenal were on top and Bukayo Saka’s strike forced a good save from Kasper Schmeichel before Aubameyang headed over from Kieran Tierney’s cross.
Lacazette should have done better with a good chance from another Tierney cross before Saka shot into the side-netting.
Arsenal suffered a blow when David Luiz limped off early in the second half, with Maddison shooting over as Leicester tried to take advantage of any confusion in the rejigged Gunners rearguard.
Maddison went for another audacious effort from near the halfway line, but Leno scrambled back to spare his blushes.
Hector Bellerin, already shown a yellow card, was fortunate to escape a booking when he crunched into James Justin.
It was the kind of game crying out for the creativity of Mesut Ozil, the exiled playmaker left out of Arsenal’s Premier League squad this season.
Instead, Arteta sent on Nicolas Pepe midway through the half in a bid to perk Arsenal up.
Bellerin brought a good save from Schmeichel when he met Aubameyang’s cross with a powerful volley.
But Arsenal were hit with a sucker punch in the 80th minute.
Youri Tielemans’ ball over the top for Cengiz Under was perfectly weighted and the Turk squared across goal for Vardy to head into the empty net.