The defending champion and 16-times Grand Slam winner, who has won the season-ending Finals on five occasions, broke Fish at every time of asking in the first set, but was thrown a strong challenge afterwards as the American bounced back to take the second.
A tense final set contained just one break from world number four Federer as both men showed a fine array of serves, volleys and ground-strokes to wow the crowd at the O2 Arena.
Federer had already qualified for the semi-finals after thrashing Spain's Rafael Nadal, while even a big win for Fish would have seen him go out of his first Finals.
Next up for Federer is one of Novak Djokovic, Tomas Berdych or David Ferrer. A semi-final victory would put Federer back to third in the ATP rankings, with current incumbent Andy Murray withdrawing from the Finals due to injury.
Later on Thursday world number two Nadal faces popular Frenchman Jo-Wilfried Tsonga to decide who joins Federer in the last four.
Federer, 30, controlled the first set from the baseline in canny fashion as Fish was unable to hold, largely due his nervous serving and impatient ground-strokes.
Fish did break back early on, thanks to a couple of errors from his opponent, but it was all Fed as the former world number one toyed with his opponent for his final break then held with an ace to close out the set.
The second set was an entirely different affair though as an aggressive Fish moved to the net with pace and pulled out some fine serves, including several aces.
He was unable to convert his first round of break points but, on Federer's second service game, the American put in some killer returns before watching the Swiss make an uncharacteristic error to hand him the break.
Fish was on fire, showcasing some Federer-esque drops and volleys as he raced through his service games to take the first set, almost breaking Federer again in the process.
It looked like the momentum was with the 29-year-old, but Federer regained his composure to break his opponent at the first time of asking in the third and final set, outfoxing the American with some lovely gliding forehands and effortless footwork before scooping a pass to win the game.
That put Federer 2-0 up and, while Fish served well for the rest of the match, the Swiss barely dropped a point in his serve to add a gloss to his brilliant round-robin form.