"This is one I'm never going to forget," said Keselowski, who had been the runner-up twice in the past four races here.
Keselowski or Busch led the last 160 laps and swapped the lead several times during a green flag run that began with 64 laps to go.
Keselowski had the lead coming out of the 14th and final caution, but Busch quickly slipped underneath him to go back in front. Keselowski stalked him for 14 laps, the nose of his Ford inches from the rear bumper of Busch's Toyota.
When he finally got around Busch again, he gradually pulled away, opening a lead of nearly two seconds as Busch's car, dominant for much of the day, faded. The lead paid off at the end when Keselowski had to navigate around lapped traffic. He won by 1.8 seconds.
"All we did was put four tires on, and when we did, it went to junk," Busch said of his car. "I hate it for our guys. They've deserved all year better finishes than what we've been able to produce, and here's another one today. Just frustrating season so far."
Busch led a race-high 274 laps and finished second, followed by Chase Elliott, Joey Logano and Austin Dillon.
It was the first time NASCAR tried its new stage racing on a short track, and it provided some excitement.
Martin Truex Jr. won the first stage in a three-lap sprint that featured lots of banging as drivers jostled to make the point-scoring top 10.
Elliott won stage two when Ricky Stenhouse Jr., trying to get back on the lead lap, nudged Busch on the final lap of the stage, getting Busch just loose enough for Elliott to slide underneath him to score the regular season points and coveted playoff point.
Busch said he has no problem with being bumped, as long as Stenhouse knows to expect the same treatment in reverse.
"I actually was rolling into Turn 3 and was kind of going higher out of the way and was going to let (Stenhouse) back by and give him the lap," Busch said.
"That was my intent, and then he just drove through me and cost me my spot to (Elliott). I was trying to be a nice guy."
POINTS
Even as the only multiple winner this year, and with five consecutive top-five finishes, Keselowski is just fourth in points. Kyle Larson, who finished 17th, leads by four over Elliott, and Truex is third, another 28 points behind. Keselowski trails Truex by just two points.
BABY STEPS
Elliott insisted all weekend that he struggles mightily at Martinsville, but his performance for the weekend suggested he's figuring it out.
He won Saturday's truck series race and got a playoff point in the second stage Sunday on his way to the third-place finish.
"I hope that it wasn't just a fluke deal and we didn't just get lucky today and run good," he said.
SHORT DAY
Jamie McMurray arrived with a streak of five straight top-10 finishes and hopes of finally breaking through at Martinsville.
Instead, he took a chance not fixing a tire rub under a green flag and crashed out after just 105 laps.
UP NEXT
The series heads to repaved Texas, where most drivers will get their first look at the new surface in their first practice.