Plaza attacked from a nine-man breakaway group that included Sagan, and though the Slovak gave chase, he had to settle for his fifth second place finish of this year's race.
Jarlinson Pantano (I AM Cycling) finished the stage in third place.
Plaza timed his attack to perfection on the Col de Manse, and had opened up a lead of about a minute by the time he crested the summit.
Despite a valiant and thrilling pursuit on the descent from Sagan, the Spanish veteran held on for victory.
The main contenders all came in more than 18 minutes behind as Chris Froome (Team Sky) maintained his overall lead of three minutes 10 seconds over nearest challenger Nairo Quintana (Movistar), with Tejay van Garderen still 3:32 behind in third.
Alejandro Valverde (Movistar) still lies 4:02 back in fourth, with Alberto Contador (Tinkoff-Saxo) in fifth, 4:23 adrift.
Contador tried to isolate Froome on the final descent, but couldn't manufacture a serious opportunity.
With Greg van Avermaet (BMC) not starting due to his wife giving birth imminently and Pete Kennaugh (Team Sky) abandoned following illness, the peloton was reduced to 169 riders on Monday.
With four days in the Alps to come, riders attempted several breakaways on the day in a bid to claim a final stage win.
A tailwind made for fast racing, and two large groups eventually formed a bunch of 23 which included Sagan and fellow stage favourite Edvald Boasson Hagen (MTN-Qhubeka).
The peleton, led by Team Sky, was already 12 minutes behind at this point and would only fall further back as the stage progressed.
Adam Hansen (Lotto-Soudal) was the first to attack from the leading group, and was eventually joined by Austrian Marco Haller (Katusha).
The duo had a one-minute advantage at the foot of the second of the day's two categorised climbs, the category two Col de Manse.
They were caught midway up the ascent as the counterattacks from the chasing group began, with Plaza leading the way.
Sagan gave his all to reel the Spaniard in after the summit, risking a dangerous chase on the tricky descent, but victory went to Plaza.
After Tuesday's rest day, the Tour continues on Wednesday with a 161km stage starting in Digne-les-bains.
Stage 16 results:
1 Ruben Plaza Molina (Spa) Lampre-Merida 4:30:10
2 Peter Sagan (Svk) Tinkoff-Saxo 0:00:30
3 Jarlinson Pantano (Col) IAM Cycling 0:00:36
4 Simon Geschke (Ger) Team Giant-Alpecin 0:00:40
5 Bob Jungels (Lux) Trek Factory Racing
6 Christophe Riblon (Fra) AG2R La Mondiale
7 Daniel Teklehaimanot (Eri) MTN – Qhubeka 0:00:53
8 Thomas De Gendt (Bel) Lotto Soudal 0:01:00
9 Luis Angel Mate (Spa) Cofidis, Solutions Credits 0:01:22
10 Thomas Voeckler (Fra) Team Europcar
General classification after stage 16:
1 Christopher Froome (GBr) Team Sky 64:47:16
2 Nairo Quintana (Col) Movistar Team 0:03:10
3 Tejay Van Garderen (USA) BMC Racing Team 0:03:32
4 Alejandro Valverde (Spa) Movistar Team 0:04:02
5 Alberto Contador (Spa) Tinkoff-Saxo 0:04:23
6 Geraint Thomas (GBr) Team Sky 0:05:32
7 Robert Gesink (Ned) Team LottoNL-Jumbo 0:06:23
8 Vincenzo Nibali (Ita) Astana Pro Team 0:07:49
9 Bauke Mollema (Ned) Trek Factory Racing 0:08:53
10 Warren Barguil (Fra) Team Giant-Alpecin 0:11:03