The 32-year-old Briton made the most of his record- equalling 68th pole position to take the lead, but had to survive some concerted attacks from Vettel's Ferrari before emerging triumphant for the fifth time this season.
It was the three-time world champion's third Belgian victory and the 58th of his career, lifting him back into serious contention for the title.
Another victory in next Sunday's Italian Grand Prix could give him the lead for the first time this year.
"It's been a strong weekend for myself and the team," said Hamilton.
More From This Section
"Sebastian put up a great fight, but this is what I said I came to do here and so I did it."
Vettel said: "It was good fun, but it was intense. I was waiting for Lewis to make a mistake - and he didn't - and he was waiting for me - and I didn't.
"We did a lot better than at Silverstone. And next week is our home race... A good day overall."
- luckless Verstappen -
=======================
In perfect, if humid conditions, with an air temperature of 22 degrees and the track at 23, and in front of an estimated 125,000 crowd including an 'orange army' of 80,000, Hamilton pulled away from his record-equalling 68th pole position to lead into La Source and resisted Vettel's attack at Eau Rouge.
Hamilton built up an early head of speed.
There was an almost audible sigh of despair from the massed Dutch fans all around the circuit.
"I can't believe this," said the 19-year-old.
Hamilton pitted after 12 laps in 2.3 seconds and rejoined fourth, passing the race lead to Vettel. Almost immediately, Raikkonen, third, was put under investigation for failing to slow for yellow flags - and was hit with a 10-seconds stop- and-go penalty.
Vettel resumed in second and after one flying lap cut the Briton's lead to 0.7 seconds. By lap 18, it was back to 1.5 with Bottas third 6.9 adrift.
The two title contenders remained in close contention for several laps until, following another enforced retirement for Fernando Alonso and his powerless McLaren Honda, the Safety Car was deployed on lap 30 following another acrimonious collision between the two Force India cars.
Their crash came when Perez appeared to 'close the door' on his team-mate Ocon as they exited La Source, the Mexican suffering a puncture and Ocon a damaged front wing.
Having survived the re-start, Hamilton rebuilt his lead to 1.6 seconds with eight laps remaining, but team-mate Bottas fell to fifth behind Ricciardo and Raikkonen.
Vettel persevered, closing the gap to a second. "What sector is the faster?" asked an anxious Hamilton, the pair lapping in almost identical times. With four remaining, his lead was 1.170 seconds.
The tension was palpable on Mercedes' foot-twitching pit wall, but Hamilton extended his lead to 1.4 seconds with two laps to go and pulled further clear on his final lap to win by 2.3 seconds.