The seventh seed came out on top 2-6 6-3 6-4 for a first win against Federer in seven attempts, setting up a meeting with Grigor Dimitrov in Sunday's final.
Dimitrov prevailed 4-6 6-0 6-3 against Jack Sock after also fighting back from behind in the other semi-final, but it is Goffin's victory over the 19-time Grand Slam champion that will attract the headlines.
A much-fancied Federer, seeking a seventh title in this season-ending competition, admits to being upset after just a fifth defeat this calendar year.
"It's a bit disappointing for me because it's indoors, it's a court I like to play on, but I had my chances and missed them," BBC Sport quotes him as saying.
"When he had them, he was very committed. I think that was the difference. He's crushed me too many times in practice to not also do it once in a match situation."
Dimitrov, making his debut at the ATP Finals, beat Goffin in straight sets earlier in the tournament.