Anthony Mantha scored for Detroit (32-40-10), which lost its final two games after a season-high, six-game winning streak.
"I think we just ran out of gas," Red Wings coach Jeff Blashill said. "We've had a lot of injuries and we've got a lot of young kids playing here right now. You could see it was coming when we lost to Pittsburgh (4-1 on the road Thursday), and it really hit us tonight."
The Sabres and Red Wings each did not qualify for the Stanley Cup Playoffs.
Jimmy Howard, who strained a groin muscle in the first period, allowed five goals on 26 shots before leaving the game in the second period. He was replaced by
Kaden Fulcher
, who made nine saves in his first NHL game.
"Jimmy gave it everything he could, and our guys really hung him out to try," Blashill said. "He was trying to protect Fulcher, who hasn't even played a game in the American Hockey League yet, but he couldn't keep going."
Sam Reinhart gave Buffalo a 1-0 lead at 3:22 of the first period off a pass from Eichel.
"We expected them to come out really flying for their last home game, so we focused on trying to get a quick start," Reinhart said. "That quick goal was just what we needed."
Dahlin made it 2-0 with a power-play goal at 11:51 with a wrist shot from the right face-off circle.
Mantha scored on the power play, his sixth goal in four games, to pull Detroit within 2-1 at 15:11.
"This isn't the game we wanted to finish with, especially at home," Mantha said. "The encouraging thing is how well all these kids played in that winning streak. Now they can go back to Grand Rapids (of the AHL) and have a long playoff run."
Conor Sheary made it 3-1 at 8:37 of the second period, tipping in Casey Nelson's point shot for his 14th goal.