Gonzalo Rodriguez put the Italians ahead in the 53rd minute from the penalty spot before Dnipro's Yevhen Seleznyov converted a spot-kick to equalise three minutes later.
However, Massimo Ambrosini scored the winner in the 73rd minute to hand Fiorentina their second victory in the pool, although the visitors ended the game with 10 men after David Pizarro was sent off for a double booking four minutes from time.
The result has left Dnipro second in the group, two points clear of both Pacos Ferreira and Pandurii.
Fiorentina went into the contest in Ukraine on the back of a a 2-2 draw with Parma and having to do without injured striker Giuseppe Rossi.
The snow that had fallen in Dnipropetrovsk earlier in the day made conditions difficult for both sides.
The hosts had the first chance midway through the first half when Seleznyov surged into the area and forced Fiorentina goalkeeper Norberto Neto to dive to his right and clear.
Fiorentina had a good chance to go in front before half-time when Marcos Alonso set up Matos Ryder in the box but his central shot did not trouble Dnipro goalkeeper Denys Boyko.
Fiorentina kept the pressure on after the restart and soon took the lead.
The referee pointed to the spot after Matos was brought down in the area by Ruslan Rotan. Rodriguez then coolly struck the ball towards the far post and Boyko had no chance as he guessed wrongly.
Fiorentina's joy was short-lived as the referee awarded a penalty when Pizarro was punished for a handball. Seleznyov slammed the spot-kick high past Neto.
However, the Viola pushed forward and were rewarded when Ambrosini got his head behind substitute Borja Valero's cross and beat Boyko.
Despite losing Pizarro to a second yellow card, Fiorentina held on for the win.