The home side were indebted to Brendan Taylor's 10th one-day international hundred as they managed 289 all out from their 50 overs in Harare, but fifties from Evin Lewis, Shai Hope and Marlon Samuels helped the Windies over the line despite a late collapse.
Law pointed towards Holder's four wickets as the difference between Zimbabwe posting a score out of reach and limiting them to below 300 in the crucial qualifying encounter.
"Jason Holder, for the whole game, was outstanding," said Law.
"To only go for 35 runs in his 10, with a total of 290, is outstanding. And also picking up four wickets.
"At one stage with Brendan Taylor there, Zimbabwe looked like getting 320, 330, 340. Our fielding was very good as well. The energy we showed was outstanding."
The two-time World Cup winners are now top of the Super Six table ahead of their final match against Scotland on Wednesday, when victory would secure one of the two remaining places for next year's tournament in England and Wales.
"In a sense this next game is another final," added Law.
"We've shown signs that we're a very good cricket team, and we've got one more chance to show the world that we can do it. I'm very happy with where we are, we've only lost one game in the competition so far."
Zimbabwe's fate is also still in their hands despite a first loss of the competition, as victory over the United Arab Emirates on Thursday would still secure qualification.
"We need to put our hands up and continue our form," said Taylor.
"Because we have been good. We've just had one slip-up today. We're certainly not taking anyone for granted. We have to win on Thursday.
"The side that wins on Wednesday, they go through. We can't worry about them. We have to worry about what we do on Thursday. There you have it, that's your final. It's clear-cut."
- Zimbabwe fall short of 300 -
Zimbabwe chose to bat on a pitch that showed pace and bounce throughout the day, but they were quickly reduced to 28 for two, with Holder nipping out two early wickets.
That effectively became 30 for 3 when Solomon Mire was struck on the head by a bouncer from Kemar Roach and had to retire hurt.
Unperturbed by the situation, Taylor scored freely from the start of his innings.
He put on 49 for the third wicket with Craig Ervine, and then 76 with Sean Williams, reaching his fifty from 65 deliveries in the 27th over.
After Williams departed for a rapid 34, Taylor added 79 with Sikandar Raza, reaching his hundred in the 38th over with a reverse sweep.
With set batsmen at the crease, Zimbabwe might have reached a total in excess of 300, but West Indies' quick bowlers fought back at the death. Zimbabwe managed just 63 runs from the last ten overs, losing six wickets in the process.
Holder was particularly impressive, utilising the yorker well to finish with four for 35.
With the bat, West Indies lost Chris Gayle early but were steadied by Hope and Samuels.
Both men started slowly before accelerating through their innings, and eventually their 135-run third-wicket stand tipped the game in West Indies' favour.
"We grafted hard and we felt we had a good total, but I don't think we were sharp enough in the field today," said Taylor.
"We leaked 20 or 30 runs in the field, and that's what hurt us."
Although West Indies' lower order stumbled with the win almost within their grasp, Rovman Powell struck a six in the penultimate over to turn the match decisively in their favour.
First Published: March 20, 2018, 8:42 AM IST