Playing his 999th game for the Hurricanes' franchise, Francis broke a 3-3 tie with 5:27 remaining. Sami Kapanen carried down the right side, drew a defender and got goaltender Martin Biron to commit before throwing the puck to the top of the crease, setting up Francis' third goal in as many games.
Carolina's captain scored again into an empty net with 43 seconds to play, a goal that became the game-winner when Curtis Brown put his own rebound past Arturs Irbe 18 seconds later.
Bates Battaglia added a goal and an assist and Kapanen collected three assists for the Hurricanes, who have gotten a point in 11 of their last 12 games (8-1-1-2) and close the year with a 13-point lead over second-place Washington in the Southeast Division.
Maxim Afinogenov had a shorthanded goal and an assist for Buffalo, which fell to 1-4-2 in its last seven games.