Borja Valero put the hosts ahead in the fifth minute but two goals in seven minutes from Romulo and Juan Iturbe put Hellas in front.
Valero levelled matters in the 14th minute before Juan Vargas gave Fiorentina a 3-2 half-time lead.
The visitors suffered a blow when Bosko Jankovic was shown a red card for a handball offense in his own area and Giuseppe Rossi scored the resulting penalty before the hour mark.
Jorginho reduced the arrears with 18 minutes remaining but the visitors could not find the equaliser.
The victory has lifted Fiorentina to fifth place, level on 27 points with Inter Milan.
Hellas are one spot and five points behind Fiorentina.
The men from Verona went into the game looking to bounce back from last week's derby defeat to Chievo.
It was Fiorentina who went ahead with their first attack as Valero picked his spot inside the near post from 25 yards to beat Hellas goalkeeper Rafael.
The visitors equalised soon later when Romulo drove into the area and slotted the ball between Fiorentina goalkeeper Norberto Neto's legs.
Hellas went in front in the 13th minute when Iturbe's left-footed shot from 30 yards beat Neto.
The visitors' joy was shortlived as seconds later Valero drilled a left-footed shot from outside the area past Rafael to level matters.
Fiorentina continued to press forward and were rewarded before the break when Vargas' bullet strike from 20 yards beat Rafael.
The home side did not sit on their lead but instead looked for a fourth early and got it in the 57th minute.
The referee pointed to the spot after Jankovic used his hand to clear Nenad Tomovic's attempt on goal.
Rossi stepped up to take the spot-kick and he struck the ball to the far post and out of Rafael's reach.
Hellas never gave up hope and despite being a man down, they cut the deficit when Jorginho placed the ball into the bottom corner from 25 yards.
Fiorentina held on for their eighth win of the campaign.