Bottas, on pole in his Mercedes, startled his rivals as he powered away from the grid at the Red Bull Ring circuit, prompting Vettel to claim he had jumped the start.
But an examination by the stewards left Finland's Bottas in the clear as he claimed his second win of the season and boosted his own title hopes.
His teammate Hamilton, hampered by a five-place grid penalty for a gearbox change, moved through to fourth from eighth, but Vettel is now 20 points ahead with Bottas in third, 35 points adrift after eight races of 19.
Daniel Ricciardo claimed the final podium sport for "home team" Red Bull, holding off a charging Hamilton in a race that came to life in the closing laps.
It was the fifth straight podium for the Australian and consolation for his team after Max Verstappen was forced to retire after an early crash which also forced out Fernando Alonso in his McLaren.
Ferrari ace Vettel made a late bid for victory, cutting the gap on the previous dominant Bottas to just half a second after switching to super-soft tires for his second stint.
"I needed just one more lap," he claimed.
Bottas said he had a massive blister on his tire so was relieved to win a race he had controlled from the start.
"It's only the second win of my career. I think that was the start of my life," he said.
After the controversial race in Baku two weeks ago where Vettel was penalized for driving into Hamilton, the Austrian round was relatively incident-free with the two rivals separated due to Hamilton's starting position
Hamilton, who suffered handling problems with his Mercedes, has missed out on the podium in four of the last six races and cut a forlorn figure in post-race interviews.
"It has obviously been a difficult weekend," he told Sky Sports.
He will look for a change of fortunes in front of his home crowd at the British Grand Prix next week.
Kimi Raikkonen finished a distant fifth in the second Ferrari, with Romain Grosjean an excellent sixth for Haas.
Sergio Perez and Esteban Ocon were seventh and eighth for Force India, with Williams pair Felipe Massa and Canadian teenager Lance Stroll completing the points scoring positions.