Evgeni Malkin had two assists, and Matt Murray made 28 saves for the Penguins (39-21-6), who have won two in a row after a six-game losing streak. Pittsburgh trails the Washington Capitals and Philadelphia Flyers by three points for first place in the Metropolitan Division.
"I think our response in the third period was huge for us," Hornqvist said. "We didn't have a great second, but we came back in the third and played a really hard, solid team effort. That's what it's going to come down to here in the stretch, to work for each other. We can have some bad shifts once in a while, but if we stay with our process and trust each other, we'll be fine."
WATCH: [All Penguins vs. Sabres highlights]
Jake McCabe and Marcus Johansson scored, and Jonas Johansson made 28 saves for the Sabres (29-30-8), who have lost five straight while being outscored 19-9.
"We definitely created enough chances to score goals, and I think for a lot of that game we were the better team," Johansson said. "Second period, we played really well and we pressured them and pushed them back, but we come out empty-handed out of that period and it's frustrating when it's like that. But you know, winning hockey games, you've got to score more goals than the other team, and we didn't do that."
Hornqvist put Pittsburgh ahead 1-0 at 7:56 of the first period with a backhand while falling down after Nick Bjugstad crashed into Johansson. Sabres coach Ralph Krueger challenged the play for goaltender interference, but the call was upheld after a video review.