Toro Rosso teammate Pierre Gasly also managed to avoid the first lap contact and made good on his 10th place start to secure ninth in the same week he was confirmed as the replacement for Daniel Ricciardo at Red Bull next season.
Vettel made a strong start and moved by Hamilton a couple of corners into the race just as the safety car was deployed after the opening corner crash.
Hamilton had a crack at the Ferrari as the race went green but Vettel was able to hold him off and he cruised to his 52nd career win.
"I had a great start and I'm not sure Lewis saw me. He pushed me quite far to the left but I knew my chance would be later on up the hill," Vettel said of his opening lap.
"I think I timed it well.
"As soon as I was ahead I was quite relieved. I had a good re-start and after that it was a very smooth race."
Hamilton retains a 17-point lead in the standings but admitted he didn't have an answer to the Ferrari in this race.
"Congratulations to Seb," the Mercedes driver said. "I did everything I could in the race and I think we performed quite well this weekend but he drove past me like I wasn't even there on the straight.
"We have to keep pushing to try and catch up."
Red Bull's Max Verstappen completed the podium.
The championship moves to Italy next weekend.