Chasing 173 to win, the former champions were led by a swashbuckling knock of 72 not out by Kohli as they strolled to the target with five balls to spare.
This becomes India's second final in five World Twenty20s after they won the inaugural event held in South Africa in 2007.
They meet Sri Lanka in the final in Dhaka on Sunday.
In contrast, South Africa, regarded as perennial chokers in crucial matches, yet again failed to reach any world level final since their readmission into cricket in 1991.
Mahendra Singh Dhoni, who will lead India to a triple crown if his team win the final with the 2011 World Cup (50 overs) and 2013 Champions Trophy in the bag, praised the run chase.
"Everybody saw that the wicket was better than those we have played on, and they believed they could chase this down. It is not just the self-belief but the belief in each other that is crucial," said Dhoni, praising Kohli.
"There are not many who are as consistent as Virat. It is great to have him at number three," said Dhoni of Kohli who played just three dot balls in his innings.
South African captain Faf du Plessis praised India and Kohli.
"We put up a good total but the bad thing is, MS and his team know how to chase," said du Plessis. "They have done it many times and Virat played a great innings."
Kohli smashed five boundaries and two sixes off 44 balls in a brilliant display of batting, highlighting India's strength at chasing a target.
He hit paceman Dale Steyn for a boundary to seal the win much to the jubilation of a packed Shere Bangla stadium.
Kohli and the other Indian batsmen blunted South Africa's best bowlers, leg-spinner Imran Tahir – joint highest wicket-taker so far in the tournament with 12 – and paceman Steyn with authority.
Tahir managed just one wicket for 30 runs in his four overs while Steyn went for 36 in 3.1 overs.
Kohli brought up his seventh T20 fifty with a huge six off Tahir and despite the loss off Yuvraj Singh (18) and Suresh Raina (21) kept the run-chase smooth.
Rohit Sharma made a 13-ball 24 with a six and four boundaries and Ajinkya Rahane scored 32 off 30 balls.
South Africa, who batted after winning the toss were helped to 172-4 with du Plessis scoring a 41-ball 58 for his fifth Twenty20 fifty.
He added 71 for the third wicket with Jean-Paul Duminy who made an unbeaten 40-ball 45 to bolster the innings.
Du Plessis, who missed South Africa's last game against England because of a slow over-rate suspension, hit five boundaries and two towering sixes as the duo negotiated an Indian spin quartet with aggressive batting.
South Africa lost opener Quinton de Kock (six) in the first over before Hashim Amla and du Plessis took the score to 44 in the fifth over.
But Ravichandran Ashwin, who took 3-22 in his four overs, put the brakes on South Africa's progress, claiming Amla (22) and then dangerman AB de Villiers (10) off a miscued pull shot which was smartly held by Rohit Sharma at long leg.
In between du Plessis and Duminy batted with guts to take South Africa to 115 before Ashwin bowled du Plessis off a miscued sweep.
Duminy, who hit three sixes and a four, added another 43 for the unbroken fifth wicket with Andrew Miller (23 not out) to help South Africa add 106 in the last ten overs.
Leg-spinner Amit Mishra, India's most successful bowler in the Super-10 stage, went for 36 runs in his three overs without taking a wicket. – Sapa-AFP