Hamilton había caído a la tercera posición después de un reinicio del coche de seguridad provocado cuando Kimi Raikkonen de Alfa Romeo chocó con la rueda trasera izquierda de Antonio Giovinazzi en la séptima vuelta.
Pero Hamilton, de 36 años, superó a Verstappen en la vuelta 11, y finalmente superó a Bottas, que había comenzado en la pole, para el liderato nueve vueltas después.
Una vez que se adelantó en el Circuito Internacional de Algarve, Hamilton nunca miró hacia atrás, ganando por un cómodo margen de 29,148 segundos.
La victoria de Hamilton es la segunda de la temporada y lo coloca ocho puntos por delante de Verstappen de Red Bull en la clasificación del título.
«Fue una carrera tan dura física y mentalmente», dijo Hamilton a los periodistas después de la carrera. «Hoy no fue del todo perfecto, así que miraremos esas áreas y volveremos las piedras».
El siete veces campeón del mundo buscará ampliar su ventaja en la clasificación del título en el Gran Premio de España el 9 de mayo.