Evenepoel edged Enric Mas (Movistar) in a sprint to the line shortly after the pair caught Robert Gesink (Jumbo-Visma) in the closing moments of the 192-kilometre stage.
Mas made several attacks on the day's final climb but was ultimately unable to take time off his Quick-Step Alpha Vinyl rival, who in turn responded with few moves of his own.
It served to fragment the 10-strong red jersey group, leaving Mas to attack one final time as the race reached its closing kilometre.
That was enough to rid the Spaniard of the remaining GC contenders - among them, Juan Ayuso, Joao Almeida (both UAE Team Emirates) and Miguel Angel Lopez (Astana) - but not Evenepoel.
Instead, the pair pressed on, surpassed Gesink - the sole survivor of the day's early break - and locked horns in a battle eventually won by Evenepoel.
The Belgian crossed the line two seconds ahead of Mas and Gesink, with Jai Hindley (Bora-Hansgrohe) leading the pack across 13 seconds later.
It was a significant moment in the career of Evenepoel, who credited his poise in completing the "most perfect day ever".
"It’s really, a new achievement in my life," Evenepoel said after the race.
"It was a pretty tough stage, with really hard climbs in the final, and there were early attacks from UAE with Almeida. The race was really hard, but we always stayed calm. That’s what I’ve learned the most, to always stay calm."
"Enric is a really fair play guy, and in the end, we worked together to go for the stage win," he added.
"In the end, it was a sprint, and I think it was a great race from the team. A perfect day. This was the most perfect day ever."
Mas now trails Evenepoel by 2'07" in the general classification, while Ayuso sits 5'14" back in third, ahead of Lopez and Carlos Rodriguez (Ineos).
Rodriguez lost 1'19" after forming part of a multi-rider crash after the opening 15 kilometres of the stage, with King of the Mountains leader Jay Vine forced to abandon the race due to his injuries.
La Vuelta continues tonight with Stage 19 LIVE on SBS and SBS On Demand from 10:50pm (AEST).