Batting with a lot of grit and gumption, Kohli anchored India to a challenging 311 for seven after his side was in a spot of bother, having lost five established batsmen at a score of 210 in 40 overs.
Openers Shikhar Dhawan (69) and Rohit Sharma (46) had laid a strong foundation with their 123-run stand and Kohli (102) ensured that their hard work does not go waste as he made up for the failure of the middle-order with his gritty 14th one-day century.
Pacer Bhuvneshwar Kumar rattled the West Indies chase with wickets of Chris Gayle and Darren Bravo, and rain gods only made the job tougher for the hosts as their target was revised to 274 from 39 overs after a two-hour rain delay.
West Indies had a daunting task of scoring a further 218 runs from 39 overs after resuming at 56 for two in 10 overs.
India, desperately requiring a win to remain in the hunt for a berth in the final, bowled out the hosts for 171 in 34 overs to walk away with a bonus point.
India's victory meant that the tournament is open with all three teams having a chance to qualify for the final. West Indies next play Sri Lanka on Sunday and then India face Sri Lanka on Tuesday in the last league match.
West Indies batsmen succumbed to pressure after resumption of play and lost wickets in a heap. Stage was set for Indian pacers and Kumar (3/29) and Ishant Sharma in no time had knocked off half of the West Indies' batting line up.
Sharma had Marlon Samuels (6) caught and removed set opener Johnson Charles (45) while Kumar added wicket of dangerous Kieron Pollard, who could not even open his account.
Umesh Yadav (3/32) joined the party by scalping Denesh Ramdin (9) and rival skipper Dwayne Bravo (14) to leave West Indies reeling at 108 for six.
Earlier, Kohli got out in the last ball of the innings as he nullified the success of West Indies fast bowlers, who had put the hosts in a good position with regular strikes.
Kohli faced 83 balls in his innings and punished the Caribbean bowlers with 13 fours and two sixes.
After 40 overs, India had 210 runs on the board and only Kohli to bat with tail-enders as pace duo of Kemar Roach and Tino Best had polished off the Indian middle-order.
Kohli responded to the challenge in the best possible manner as India scored 101 runs in the last 10 overs and his contribution was 67 runs. R Ashwin supported Kohli well with his 18-ball 25 as they shared a 90-run stand for the seventh wicket in 8.2 overs.
Earlier after sent in to bat, Dhawan and Sharma provided a solid start to India with 123-run stand, which was broken when the left-hander chose to play aggressively after spending a watchful 23 overs at the crease.
Coming into the make-or-break match, both the Indian openers batted with a lot of responsibility. They chose caution over aggression, relying on rotation of the strike and hitting an odd boundary in between.
Dhawan, who by nature is a stroke-maker, kept his natural urge to go for strokes under control till India had safely negotiated almost half-the-overs.
The left-hander opened up after India had crossed 100-run mark. He chose local lad and highly-rated spinner Sunil Narine for some punishment, hitting him for two sixes and a four.
However, Dhawan could not continue in the same vain, as he holed out to Darren Bravo at deep square leg when he attempted to hit one off Kemar Roach over the ropes. His knock came off 77 balls and contained eight fours and two sixes.
Sharma too joined him in the pavilion when he edged one behind off Tino Best. In space of seven overs India lost Suresh Raina (10), Dinesh Karthik (6) and Murali Vijay (27).
Ravindra Jadeja's run out made things worse for India but Kohli pulled India out of trouble.