Afghanistan was bowled out for 186 — the fourth time in five matches that New Zealand has kept an opponent under 200 runs — and the hosts passed that total with 13.5 overs to spare.
The 36-year-old left-arm spinner Vettori needed two wickets to reach 300 and started ideally by bowling Usman Ghani with his first delivery.
Vettori (4-18) reached the milestone when he bowled Nawroz Mangal for 27. He then dismissed Afghanistan captain Mohammad Nabi (6) and wicketkeeper Afsar Zazai (0) with consecutive deliveries as Afghanistan slumped to 59-6.
"In any form of the game you can play well and not take wickets and vice-versa," Vettori said. "(I was) just trying to fulfil that role of being as economical as possible and the wickets came today. That doesn't always happen and it's great when it does."
Trent Boult supported Vettori, taking 3-34 and joining teammate Tim Southee as the leading wicket-taker at this World Cup with 13 dismissals. Vettori is third with 12 as New Zealand bowlers occupy the first three placings on the wicket-taking list.
Afghanistan was playing its third match in a week in which it has travelled almost 10,000 kilometres (6,000 miles) — from Dunedin to Perth and then to Napier — and was coming off a 275-run loss to Australia.
The frayed confidence from that game was evident as it lost opener Javed Ahmadi, lbw to Boult, to only the ninth ball of its innings and Ghani five balls later which it was 6-2. Boult then dismissed Asghar Stanikzai (9) and Vettori's quick three wickets put Afghanistan at strong risk of a sub-100 score.
"In the whole tournament our top five batsmen didn't click," Nabi said. "Its hard luck for our team that they didn't click but also Vettori bowled brilliantly for the first few overs to take four wickets."
But Samiullah Shenwari, Afghanistan's most consistent batsman, combined in an 86-run partnership with the eighth man in, Najibullah Zadran, to halt the decline.
Shenwari played the disciplined sheet-anchor role as Najibullah went for his shots, lacing seven fours and two sixes. He was finally out for 56 off as many balls.
Corey Anderson hit Shenwari in the back of the helmet which a bouncer. He was momentarily stunned and later called for medical assistance but continued undeterred. His was the ninth wicket to fall, having made 54 off 110 balls.
New Zealand's batting lineup made what is becoming a trademark barnstorming start. Brendon McCullum made 42 from just 19 balls in a 53-run opening partnership with Martin Guptill, who top-scored with 57.
McCullum hit six fours and a six off Mohammad Nabi, but was bowled next ball.
Guptill and Kane Williamson (33) put on 58 for the second wicket before Williamson was caught by Shenwari from the bowling of Shapoor Zadran.
The form of McCullum and Williamson through the tournament has been impressive, but has allowed little time at the crease for teammates. They combined for 122 of New Zealand's 331 against Sri Lanka, 53 of 146 against Scotland, 86 of 125 against England and 95 of 152 against England. That trend continued with 75 of the 188 on Sunday.
Guptill went on to his first half century at the tournament from 69 balls before being run out by Shenwari's throw. Grant Elliott (19) was also run out before Ross Taylor (24) and Corey Anderson (7) steered New Zealand to the winning total of 188-4.
New Zealand, which has used an unchanged 11 in all five games, will play its last pool game against Bangladesh in Hamilton on Friday, while Afghanistan will wrap up its first World Cup appearance against England in Sydney on the same day.