Hamilton was catching the German on every lap but ultimately ran out of time and finished nearly seven seconds behind.
Mercedes had not responded to Ferrari pitting Sebastian Vettel early from second place, but was moved to call in both its drivers under the safety vehicle.
"Lewis obviously was a very big threat again towards the end. but the auto was a dream today".
Vettel then had to fend off a late-race charge from Hamilton, who was chasing him down from 20 seconds adrift after a final pitstop that included a five-second penalty for the Mercedes driver for slowing Daniel Ricciardo at the pit entry under safety auto conditions.
"We just have to make sure we keep it going". The team have generally been making really great choices this year.
Bottas had started on pole for the first time in his Formula 1 career and while he held the lead until the first pit stops, he struggled for pace throughout the race. It was his 11th podium. "I should have easily been on pole", he said. "It was a really tricky race today". I think we could have been a bit closer. To try to minimise the delay he slowed on entry backing up the Red Bull of Daniel Ricciardo.
The three-time world champion finished 6.6 seconds behind victor Sebastian Vettel at the Sakhir Circuit, thanks largely to a five-second time penalty for driving "unnecessarily slowly and erratically" in the pit lane as he tried to prevent Daniel Ricciardo from getting past. To stop teams gaining an advantage in such circumstances, drivers must remain within five seconds of the vehicle in front under the Safety auto, and as Ricciardo almost went into the back of Hamilton as the entered the pit lane, Hamilton exceeded that limit and was hit with a five-second penalty. "I tried my hardest to catch up".
"From then on we were on the back foot", he said. "Losing points for the team is definitely painful".
Vettel admitted after qualifying that the gap to the Mercedes drivers left him feeling "down" as he was happy with his auto, and after taking victory he suspects the good handling of his vehicle played a part in his strong race performance.
"It's small percentages now", he said of the difference between success and second.
It was 24 degrees Celsius (75 Fahrenheit) with a refreshing breeze when the race started at 6 p.m. local time (1500 GMT) and finished under floodlights.
"It was crucial for us to get between them and not to let them get in front and pull away and do their thing", said Vettel.More news: Blues vs. Wild game three preview: Sanford stays in
"The vehicle was a dream today ... the last half of the in-lap with the fireworks & the track lit up, I just thought I love what I do", the German added.
Verstappen asked his team to match that strategy and he came in on the next lap.
Mr. Hamilton, who had been dominant in China last weekend, was gracious in defeat, vowing to fight on.
The incidents were coming fast, with 18-year-old Lance Stroll hit from the side on lap 13 by Carlos Sainz Jr. and this forced the safety vehicle to come out.
Both Mercedes drivers used the safety vehicle incident to pit for new tires, but Hamilton held up Ricciardo.
Hamilton has won 54 races while Bottas, who was previously at Williams, has yet to triumph.
After the Mercedes drivers were put on different tyre strategies, Bottas moved out of the way for Hamilton on two occasions during the 57 lap race, but on the second occasion he effectively ceded second place to his teammate.
"I never raced with less power in my life", the Spaniard told his team. Vettel was braver on the brakes and passed Hamilton around the outside.
Mr. Hamilton chased Mr. Vettel all the way to the finished but could not make up for a penalty he suffered earlier in the race.
"Over the years, nothing changes and I feel pain in my heart", Hamilton said.
After battling for a points finish, the Spaniard endured the agony of having to retire two laps from the end with engine trouble.