Pakistan swept to a 3-1 series win after reaching 239 for three in 46.5 overs in reply to the tourists' score of 238 for seven.
Opener Hafeez smashed 92 from 111 balls with five fours and two sixes. Shoaib Malik remained unbeaten on 34 and Abdul Razzaq seven.
Shivnarine Chanderpaul had led the West Indian innings by scoring his fourth hundred in 205 one-day internationals, while skipper Brian Lara (44) crossed the 10,000-run mark in one-dayers.
Although Lara became the fifth batsman -- after Sachin Tendulkar, Saurav Ganguly, Sanath Jayasuriya and Inzamam-ul-Haq -- to reach the milestone when he made 25 runs in his 287th game, he could not prevent Pakistan's victory charge.
"We just didn't get necessary runs on the board. But the team must be given credit for playing good cricket in the last three and half months," Lara said.
"We have got a good team and we are trying to mould it into a winning team."
Pace bowler Rana Naved, named man of the series for his total haul of 11 wickets, restricted the tourists on the flat track by claiming 4-43 and completed a successful comeback from a groin injury.
"Wicket was very good for batting and it was important to try out variations in the bowling," Naved said.
West Indies were hoping to carry on the momentum after winning the last match in Multan but were foiled when wicketkeeper Akmal exploited the powerplay overs effectively.
Hafeez and Akmal put Pakistan in control with an 87-run first-wicket partnership in 17 overs.
Akmal belted nine fours and one huge straight six off Daren Powell before being caught at deep mid-wicket by substitute Jerome Taylor off Corey Collymore.
Hafeez then paired up with Yasir Hameed (41) to add 89 from 117 balls to frustrate the tourists further.
Hameed was caught at long on by Runako Morton off Chris Gayle after his 69-ball knock.
Hafeez was trapped leg before by Dave Mohammed with Pakistan 15 runs short of victory.
Earlier, opener Chanderpaul made 101 from 142 balls with eight fours before being dismissed in the 48th over.
It was Chanderpaul's first one-day hundred since 2002 when he made 108 against New Zealand at Gros Islet.
He shared partnerships of 51 with Marlon Samuels (22) and 96 with Lara after Gayle (7) once again fell to Naved.
Naved also came back for a damaging final spell in the last 10 overs to claim the scalps of Lara and Chanderpaul, who was caught by Hameed at deep mid-wicket.
Naved's fourth victim was Dwayne Smith, trapped leg before for one as the tourists lost four wickets for 22 runs.
List of highest run scorers in one-day cricket after Brian Lara became the fifth batsman to cross the 10,000 run mark.
|Sachin Tendulkar (India)||374||14537|
|Sanath Jayasuriya (Sri Lanka)||370||11260|
|Saurav Ganguly (India)||279||10123|
|Brian Lara (West Indies)||287||10019|