After tumbling to the pavement when a spectator's bag caught the handlebars of his bicycle, Armstrong remounted, nearly fell again and then raced away from Jan Ullrich to beat his closest rival by 42 seconds.
He now leads the German by 1 minute 7 seconds in the overall standings. Alexandre Vinokourov of Kazakhstan faded badly on the final climb and now stands 2:45 minutes behind Armstrong.
Armstrong completed the 159.5-kilometre course from Bagneres-de-Bigorre to the ski resort of Luz-Ardiden in 4:29.26 hours.
Iban Mayo finished second, with Ullrich coming in third just behind the young Spaniard.
"I knew it would be an important race for me and the Tour today and that if I wanted to win the Tour I would have to attack," the 31-year-old American said.
Once again disaster nearly struck Armstrong as he stepped up the pace on the 13.4-kilometre ascent to the finish and suddenly fell onto his side, with Mayo crashing over him.
"It was my fault," Armstrong said. "I was riding too close to the spectators."
He remounted, then nearly crashed again when his right foot slipped off the pedal.
"After the fall I had a big rush of adrenalin and told myself, 'Lance, if you want to win the Tour, go and attack.'"
He did just that, after Ullrich and the other riders in the group sportingly waited for him to remount after his fall.
Two years ago, when Ullrich crashed during a mountain descent in the Tour, Armstrong waited for him to get back on his bicycle and catch up.
The stage, which included two climbs rated "out of category", the Col de Tourmalet and the final climb, was marked by a long breakaway by Colombian Santiago Botero and Frenchman Sylvain Chavanel.
Chavanel eventually took off on his own on the ascent up the Tourmalet, but was caught by Armstrong with four kilometres to go.
Armstrong, who is trying to become the second rider after Spaniard Miguel Indurain to win five Tours in succession, warned that the race was far from over.
"Jan Ullrich is a great cyclist, and there is the time trial on Saturday," he said. "Anything can still happen."
Ullrich beat Armstrong by 1:36 in the first individual time trial on July 18.
Tuesday is a rest day for the riders, before they take to the final mountain stage through the Pyrenees on Wednesday.
The 2003 Tour de France will be decided by Saturday's 49-kilometre time trial as there is an unwritten law that riders don't attack the leader's yellow jersey on the last day.
The Tour ends Sunday on the Champs-Elysees in Paris.
Stage 15 results, top 15 (Bagneres-de-Bigorre - Luz-Ardiden, 159.5 km)
1. Lance Armstrong (USA/USP) 4hr 29min 26sec
(average: 35.519 kph)
2. Iban Mayo (SPA/EUS) at 0:40
3. Jan Ullrich (GER/BIA) 0:40
4. Haimar Zubeldia (SPA/EUS) 0:40
5. Christophe Moreau (FRA/C.A) 0:43
6. Ivan Basso (ITA/FAS) 0:47
7. Tyler Hamilton (USA/CSC) 1:10
8. Alexandre Vinoukurov (KAZ/TEL) 2:07
9. Jose Luis Rubiera (SPA/USP) 2:45
10. Sylvain Chavanel (FRA/BLB) 2:47
11. Carlos Sastre (SPA/CSC) 3:12
12. Denis Menchov (RUS/BAN) 3:12
13. Roberto Laiseka (SPA/EUS) 3:12
14. Georg Totschnig (AUT/GRL) 3:24
15. Manuel Beltran (SPA/USP) 3:24
Stage 15 overall standings, top 15
1. Lance Armstrong (USA/USP) 65hr 36min 23sec
2. Jan Ullrich (GER/BIA) at 1:07
3. Alexandre Vinoukurov (KAZ/TEL) 2:45
4. Haimar Zubeldia (SPA/EUS) 5:16
5. Iban Mayo (SPA/EUS) 5:25
6. Ivan Basso (ITA/FAS) 8:08
7. Tyler Hamilton (USA/CSC) 9:02
8. Christophe Moreau (FRA/C.A) 11:12
9. Francisco Mancebo (SPA/BAN) 16:05
10. Carlos Sastre (SPA/CSC) 16:12
11. Denis Menchov (RUS/BAN) 17:09
12. Georg Totschnig (AUT/GRL) 18:52
13. Manuel Beltran (SPA/USP) 19:34
14. Richard Virenque (FRA/QST) 22:00
15. Roberto Laiseka (SPA/EUS) 24:19