Cavendish escaped in a break led by Contador’s Saxo-Tinkoff team and sprinted to his second stage win of this year’s race, and 25th in total.
Crosswinds split the peloton before Saxo-Tinkoff attacked 30km out, with Froome’s Team Sky unable to respond.
Mollema moves second overall, two minutes and 28 seconds behind Froome.
Spaniard Contador is third, a further 17 seconds back, with another Saxo-Tinkoff rider Roman Kreuziger fourth and Mollema’s Belkin team-mate Laurens Ten Dam in fifth.
Most Tour de France stage wins
34 - Eddy Merckx (Bel) 1969 to 1975
28 - Bernard Hinaut (Fra) 1978 to 1986
25 - Andre Leducq (Fra) 1927 to 1935
25 - Mark Cavendish (GB) 2008 to present
Froome began the stage with a 3’25″ lead over Alejandro Valverde but in a day of thrilling racing, the Spaniard fell back from second to 16th overall after being dropped.
Valverde had to stop to change a wheel after a puncture and never regained touch with the leaders, eventually finishing almost 10 minutes behind Cavendish, who saw off Peter Sagan to triumph.
Cavendish moves level with Andre Leducq in third place on the Tour’s all-time list of stage winners behind Eddy Merckx (34) and Bernard Hinaut (28).
The Great Britain rider, whose Omega Pharma-QuickStep team were the first to attack after just 60km of the 173km race that began in Tours, said afterwards: “It was an incredible day. We talked about it and we knew the wind was strong. (Team-mate) Gert Steegmans just went for it and it just kicked off.
“I nearly missed the Contador attack. Michel Kwiatkowski got me across and I just sprinted – I just managed to get on. With an echelon (the diagonal formation riders adopt in the road to deal with crosswinds) it is like saving yourself after falling through ice – you have got five seconds to make it, otherwise it is over.
“It wasn’t easy but my team-mates rode out of their skin and it was incredible to be able to win it. I knew if I stayed behind Sagan I would be able to get it, and that is what I did.”
Cavendish also picked up 45 points in the green points jersey standings for winning the stage, to add to the 17 points he won in the intermediate sprint. However, he is still 84 points behind classification leader Sagan.
The duo were the only recognised sprinters left in a group of 14 riders who raced clear towards the finish in Saint-Amand-Montrond after German duo Marcel Kittel and Andre Greipel were caught out in the crosswinds.
Kittel, who has won three sprint finishes, was the first to be distanced when Cavendish’s team accelerated and once they realised they had cut the Argos-Shimano rider off, they kept the pace high to stop him getting back on.
Greipel was likewise dropped when Contador’s team attacked in the closing stages – a move that was covered by Cavendish and Mollema but caught out Froome and Team Sky.
British riders Ian Stannard and Geraint Thomas were among Froome’s team-mates who tried to close the gap but once they ran out of steam it was all about limiting losses.
“It was another reminder that we’ve got to be on our toes the whole time on stages like this which look easy on paper,” said the race leader.
Saturday’s 14th stage is a hilly 191km race from Saint-Pourcain-sur-Sioule to Lyon which features seven categorised climbs, although none is mountainous.
Results of stage 13:
1. Mark Cavendish (GB) Omega Pharma – Quick-Step 3:40:08″
2. Peter Sagan (Svk) Cannondale same time
3. Bauke Mollema (Ned) Belkin
4. Jakob Fuglsang (Den) Astana
5. Niki Terpstra (Ned) Omega Pharma – Quick-Step
6. Roman Kreuziger (Cze) Saxo – Tinkoff
7. Alberto Contador (Spa) Saxo – Tinkoff
26. Chris Froome (GB) Team Sky +1:09″
70. Alejandro Valverde (Spa) Movistar +9:54″
Overall standings after stage 13:
1. Chris Froome (GB) Team Sky 51:00:30″
2. Bauke Mollema (Ned) Belkin +2:28″
3. Alberto Contador (Spa) Saxo – Tinkoff +2:45″
4. Roman Kreuziger (Cze) Saxo – Tinkoff +2:48″
5. Laurens ten Dam (Ned) Belkin +3:01″
Green points jersey standings after stage 13:
1. Peter Sagan (Svk) Cannondale 357
2. Mark Cavendish (GB) Omega Pharma – Quick-Step 273
3. Andre Greipel (Ger) Lotto-Belisol 217
4. Marcel Kittel (Ger) Argos-Shimano 177
5. Alexander Kristoff (Nor) Katusha 157