"Our worst loss of the year," Marlins manager Joe Girardi said.
After Florida scored four times in the top of the 10th for a 7-3 lead, errors by shortstop Hanley Ramirez and Willingham gave Atlanta the win.
"It's a helpless feeling. I can't describe it," Willingham said.
It was a demoralizing defeat for the young Marlins, who are four games behind San Diego in the wild-card race. Florida lost for the fourth time in five games.
With one out in the Atlanta 10th, Brian McCann doubled off Joe Borowski (3-3) and took third on a single by Jeff Francoeur. Matt Diaz followed with a two-run double and took third on a bloop single by Willy Aybar.
Pinch-hitter Brayan Pena then reached when Ramirez failed to hold onto a forceout throw, scoring Diaz to make it 7-6. Giles followed with his one-out single that got past Willingham, scoring Aybar and Pena.
"I was charging to make a strong throw at home and throw him (Aybar) out. He's the tying run," said Willingham. "I don't know. I must have taken my eye off the ball. To have the game won and lose it, it hurts pretty bad."
Borowski, who has converted 34 of 41 saves this season, wasn't saying much.
"You saw it. I'm not saying anything. I still don't know what happened," he said.
Kevin Barry (1-1) got one out for the win.
"It felt like it was a movie. "There's no way this is happening. It was like something you see in American Legion ball," Braves starter Tim Hudson said of the fateful inning.
"You just don't want to be the guy that stops the rally," said Giles. "It was unbelievable. It was like being a kid again."
Ramirez hit a two-out, two-run double and Dan Uggla followed with his 26th homer for the Marlins in the 10th.
Miguel Olivo hit a two-run homer -- his 15th -- in the eighth off reliever Tyler Yates that gave the Marlins a 3-3 tie.
Edgar Renteria put the Braves ahead 3-1 in the seventh with a two-out, two-run single with the bases loaded against Matt Herges.
Hudson pitched seven innings and allowed one run and three hits. He walked none and struck out five.
Florida scored in the third when Olivo doubled, took third on a sacrifice and hustled home on a sacrifice fly to short right field by Ramirez.
Marlins starter Ricky Nolasco went six innings and gave up one run and three hits. The only run he allowed came on Francoeur's 25th home run.
Nolasco pitched out of a first-and-third jam with no outs in the sixth. The rookie struck out Adam LaRoche, got Andruw Jones on a foul pop and retired McCann on a fly ball.
- Uggla's home run was Florida's 167th of the season, breaking the record of 166 set in 2001.
- RF Francoeur made a one-handed catch of Nolasco's sixth-inning foul fly while running at full tilt. Francoeur hit the wall at waist level and toppled into the stands. He was helped back onto the field and bent over for about a minute with his hands on his knees, but remained in the game. He made a running catch of Uggla's fly for the last out of the inning.