Zamora's goal deep into stoppage time helped the Cottagers start 2012 in the best possible manner on a bitterly cold night in west London.
Arsenal had looked set to secure a fifth victory in six away matches thanks to unlikely hero Laurent Koscielny's first half header.
Defeat, though, would have been cruel on a Fulham after a spirited performance and the game's dimensions changed 12 minutes from time when Johan Djourou was sent off for a second bookable offence.
Martin Jol's side unleashed a barrage of attacks as they searched for an equaliser, which came when Steve Sidwell nodded home from close range in the 85th minute.
The drama did not stop there, though, as Fulham's continued to exert pressure that resulted in Zamora firing home in stoppage time.
Heading into the match Arsene Wenger resisted the temptation to rest in-form Robin van Persie, although his hand was forced in terms of a defensive alteration.
Francis Coquelin was drafted in as makeshift left-back due to the Gunners' growing injury problems, with Thomas Vermaelen the latest to pick up a knock on New Year's Eve.
Gervinho was the north Londoners' only other change, while counterpart Jol brought in Zamora and Sidwell.
The former returned after a spell out with an Achilles injury and led an attack-minded Cottagers line-up, although the home side spent most of the opening exchanges on the back foot.
Gervinho twice blazed over for the north Londoners and Aaron Ramsey got away a shot on goal under pressure.
Arsenal could not match their bright start with midfield guile, though, and Wojciech Szczesny was forced into action to stop Zamora taking advantage in the 10th minute.
The home side's spirited opening was almost undone three minutes later when former Gunners defender Philippe Senderos upended Gervinho in the box.
The Ivory Coast international seemed to have his legs swiped away but referee Lee Probert waved away the penalty appeals.
The visiting support felt aggrieved by the decision but were soon able to celebrate breaking the deadlock.
Ramsey found space to put in a cross from the left that, having taken a kind deflection off Stephen Kelly, was headed home by Koscielny from six yards.
Arsenal thought they had doubled their advantage almost immediately but were thwarted by some world-class goalkeeping by David Stockdale.
The England squad member stopped a close-range Ramsey drive, a miscued Sidwell clearance and then a Gervinho effort during a penalty box melee.
Stockdale was called into action once more when van Persie flicked a shot on target, which came after Bryan Ruiz shot just wide at the other end.
The Costa Rica international was proving dangerous against Arsenal's makeshift left flank and thought he had won Fulham a penalty after being fouled by Alex Song.
Jol's side looked geed up as half-time approached and Zamora headed wide after some combative play on the left, before Stockdale was called into action to stop Ramsey.
The Cottagers looked rejuvenated after the break and Ruiz fired a snatched half-volley wide inside two minutes of the restart, before Sidwell and Moussa Dembele came close.
The former then hit an audacious 30-yard drive as Fulham looked for an equaliser, which almost came when Senderos headed a Danny Murphy free-kick inches over.
Jol's side were looking dangerous in the air and came closer still through Clint Dempsey, who met a floated Ruiz ball with a darted header that just evaded the far post.
The latter was guilty of missing a gilt-edged chance in the 75th minute, firing straight at Szczesny from 12 yards when unmarked.
Fulham's hopes of finding a leveller were boosted three minutes later when Djourou was sent off for a second bookable offence.
Jol's side pushed forward in numbers and found a way past Arsenal's backline with five minutes remaining.
Ruiz's corner was headed back across goal by Senderos after Szczesny parried and Sidwell headed home from close range.
Fulham continued to press forward and eked out a winner deep into stoppage time, with Zamora volleying home from close range.