Hamilton, who started only ninth, completed the podium places after Kimi Raikkonen retired following a nasty collision with one of his own mechanics during a pit stop.
The mechanic was knocked down and taken to the medical centre to be assessed in an incident which was not out of place during a chaotic race under the floodlights of the Sakhir circuit.
Vettel was on a different strategy to the Mercedes cars but he masterfully managed his less durable tyres over the line to finish half a second clear of Bottas and claim a second successive win.
Pole-sitter Vettel was the fastest out of the blocks to retain his lead but Bottas got the jump on Raikkonen to split the Ferraris. Hamilton, out of position on the grid following an unscheduled gearbox change, failed to make any ground on the opening lap before losing a place to Fernando Alonso.
It looked as though it could get even worse for Hamilton, pictured, after Max Verstappen’s less than perfect start to the season took another troubled turn following a collision with Hamilton on lap two.
The 20-year-old Red Bull driver, who started 15th following his qualifying crash, sensed blood in his pursuit of the defending champion but his no-holds barred move cost him dearly. With his elbows firmly out, Verstappen lunged underneath Hamilton at the opening bend but did not account for Fernando Alonso who was hogging the apex.
In avoiding the McLaren driver, he inadvertently banged wheels with a helpless Hamilton. Hamilton avoided damage, but the same could not be said for Verstappen as he sustained an terminal left-rear puncture.
He stopped for a new set of tyres but his race was over - like that of Red Bull team-mate Daniel Ricciardo, who stopped on the side of the track after an electrical shutdown meaning the virtual safety car had to be deployed. On lap four the race resumed, and it was Hamilton who would take centre stage as he started his comeback. His moment of magic arrived moments later when he picked off three cars.
In a flurry of sparks, Hamilton swooped to the right at 220mph to take the inside line and overtake Alonso, Nico Hulkenberg and Esteban Ocon in an audacious move at turn 1.
By lap six, he was running in fifth after sailing by Kevin Magnussen before repeating the same move on Toro Rosso’s Pierre Gasly two laps later.
Vettel, Bottas, Raikkonen and Hamilton ran line astern before a strategic chess game ensued. Vettel stopped for the soft rubber on lap 19 with Raikkonen in a lap later for the same tyres.
Bottas was the next in, but in a surprise move he took on the medium compound, the slower but more durable of the three tyres available this weekend. It was a ploy by Mercedes to get their man to the end of the race without having to stop again.
Hamilton now led but Vettel, on the fresher tyres, sailed past on lap 26. With both Mercedes cars going until the end of the race, the question was whether both Vettel and Raikkonen would be able to make their tyres last. Raikkonen was forced to retire after the accident with his mechanic and Bottas started to reel in Vettel but the German lasted the distance.