Nishikori was overmatched in the first set but turned the match around by winning a thrilling rally when Djokovic was just two points from victory at 5-4 in the second.
The 32nd-ranked Nishikori, a wild card entry at the tournament, won the second-set tiebreaker then raced away with the final set for a career-best victory.
He will play Roger Federer in Sunday's final after the defending champion beat Stanislas Wawrinka -- his gold medal-winning doubles partner at the Beijing Olympics -- 7-6 (5), 6-2 in the other semifinal.
"It's unbelievable," said the 21-year-old, who is assured of his highest ATP ranking when the list is published Monday. "In the second set I started playing well and getting a rhythm."
Djokovic was twice treated for "pretty bad" pain in his right shoulder after having his serve broken, but praised Nishikori as a deserved winner.
"He was getting impossible balls back and really making me play every shot," said Djokovic, who was coming off a six-week break to treat a back injury. "He was better and I didn't use the opportunities I had. I don't think I should speak about that third set."
Djokovic dropped to 68-4 this year, with two of his losses the result of injury retirements.
Nishikori joins his boyhood idol Federer, in the French Open semifinals, as the only players to beat Djokovic in a full match in 2011.
Federer revealed that he practiced with Nishikori on Saturday morning to prepare him to face the world No. 1.
"I warmed him up today," said the 30-year-old Swiss, who joked that "more and more often" he was facing opponents who grew up admiring him.
"It's funny and it's nice to play the future stars," said Federer, adding that he did not regret missing a rematch with Djokovic, after spurning two match points in their U.S. Open semifinal. "It's always special for me to play the final in my hometown no matter who it's against."
Nishikori was initially outclassed as Djokovic raced to a 5-1 lead, moving his opponent around the court with powerful ground strokes.
Djokovic then lost his serve and called for a medical timeout to treat his right shoulder. Pains in the same shoulder had prompted his retirement in the Cincinnati Masters final in August against Andy Murray.
However, Nishikori then found more service trouble -- managing just a 24 percent first-serve rate in the opening set -- and Djokovic took advantage.
Nishikori improved in the second set, and a break to lead 3-2 prompted Djokovic to again call for the trainer.
Djokovic was two points from victory when Nishikori showed tenacity to win a thrilling point that brought both men to the net, before Djokovic's defensive volley went out.
"It was, like, 20, 30 (shots)," Nishikori said of the defining rally. "If you lose the point, it's almost over. I was just concentrating on putting the ball in play."
In the tiebreaker, Nishikori profited from Djokovic's wayward double-handed backhands. Nishikori dominated the decider and clinched it when Djokovic sent another backhand long.
Djokovic did not commit to playing at the Paris Masters, which starts Monday, though he would have a first-round bye.
"With this condition of the shoulder, I don't think I will be able to practice in the next couple of days. It's pretty bad," he said.
In their only previous meeting, Djokovic allowed Nishikori just nine games in a straight-sets win at Roland Garros last year.
Nishikori has just one career title, on hard courts at Delray Beach, Florida, in 2008, and previously reached one final this year. He lost to American Ryan Sweeting on clay in Houston in April.
He has enjoyed his best series of results since the U.S Open, beating eighth-ranked Jo-Wilfried Tsonga en route to a Shanghai Masters semifinals loss to Murray.
In Basel, he also recovered from losing the opening set to beat seventh-ranked Tomas Berdych in the first round.