Dimitrov trailed by a set and 4-2 before rallying to win a semifinal for the first time since February 2018, when opponent David Goffin retired in their match at Rotterdam.
The Bulgarian player created his match-point chance against Fritz in a stunning rally, with powerful forehands and angled drop shots from both sides of the net. Fritz was left slipping and seated on the clay outside the tramlines to watch Dimitrov hit a winner into the open court.
The win was sealed when the second-seeded Fritz sent a looping lob long as the fourth-seeded Dimitrov advanced to the net.
"It was a crazy match," Dimitrov said. "Honestly, very pleased with the way I fought."
He is ranked No. 33 and arrived in Geneva with a 12-9 record this season.
"I came this week with a purpose and I intend to finish it up to the end," he said. He has only one clay-court title in his eight career tournament wins. His last title was the ATP Tour Finals in 2017.
Jarry sealed the win with a delicate, low backhand volley at the net, one day after ousting top-seeded Casper Ruud, the two-time defending champion.
Zverev and Ruud combined to win the past three editions of the French Open warmup event and neither had lost at the lakeside park venue until running into the tall 54th-ranked Chilean.
Jarry is chasing his second title this year after also winning on clay at his hometown Santiago event in March.