The 2007 Masters winner carded 74 on Sunday to let his three-shot lead slip away, but a clinical round of 66 that included seven birdies saw him move clear of 20-year-old Spieth when it mattered.
Spieth, Dustin Johnson and Webb Simpson had been in a three-way share of the lead going into the final round but they couldn’t match the 37-year-old Johnson, who picked up his 11th USPGA Tour title.
“Today was a grind but I felt at ease,” Johnson said. “I was comfortable. Yesterday, I didn’t score that well.
“Today I just tried to stay unemotional and remain athletic. I hit some quality shots that helped and some quality putts that helped even more.
“What I have learned when I am in contention, and I haven’t come through, it is because I am not doing what I was doing to get in contention. So the key is to just keep doing what you are doing.”
Spieth put in the strongest challenge and could have forced a play-off with Johnson had he chipped in on the 18th at Kapalua.
He had picked up four birdies in his four-under-par round of 69 and had reached the turn with a one-shot lead.
“I want to put myself in these positions because it was fun today,” said Spieth. “It is fun to feel the pressure and put your name beside some of the best players in the world on the leaderboard.
“I take away a lot of positives. This is the first time I have slept on a 54-hole lead. My putter just didn’t hold up. It got a little cold on me.
“But it was a great experience feeling the nerves and battling.”
Simpson finished a shot further back on 17-under, alongside Kevin Streelman, who carded a final-round 67 to move through the field.
Dustin Johnson, though, saw his challenge fall away after his one-over 73 left him on 14-under.