Federico Bernardeschi struck in each half to cancel out goals from Lorenzo Insigne and Dries Mertens before he set up Mauro Zarate for what looked to be a fine winner eight minutes from time.
However, substitute Gabbiadini - who had been brought on only in the 86th minute - converted from the spot to seal a draw for the visitors and stretch their unbeaten run to 10 games.
The result means Napoli are now three points behind second-placed Roma, who beat Chievo 3-1, while they are seven adrift of league leaders Juventus.
Napoli had won their last four matches in all competitions and took the lead midway through the first half, Insigne curling a stunning effort into the top corner from 25 yards out.
The half ended in controversial fashion as Nikola Kalinic escaped a second yellow card for a blatant dive in the penalty area, with Napoli goalkeeper Pepe Reina earning a booking for his protests.
Bernardeschi equalised six minutes after the break as his free-kick from the edge of the area took a huge deflection before looping beyond the wrong-footed Reina, but Mertens’ fine solo run and finish - his eighth goal in three league games - restored Napoli’s lead.
Fiorentina were level within a minute, however, after Bernardeschi fizzed a low effort across goal and beyond Reina from outside the area, and his flighted pass was expertly volleyed in by substitute Zarate for what looked like a late winner.
Yet with just seconds to play, Carlos Salcedo fouled Mertens in the area, allowing Gabbiadini to fire into the bottom corner from the spot and rescue a point for Maurizio Sarri’s side.