Dunn swept the winner past former Rovers keeper Brad Friedel in the 89th minute after the home side bounced back from the early blow of Gabriel Agbonlahor's opener.
Chris Samba struck an equaliser in the 24th minute but despite Vince Grella's 68th minute dismissal the home side pushed on to claim the three points in style.
Nigel Reo-Coker returned to the Villa bench for the first time since his bust-up with boss O'Neill but it did not take long for the on-field action to deflect attention.
Finding himself in space in the box after a James Milner flick-on, Agbonlahor took less than three minutes to roll his fourth league goal of the season in off the post.
Rovers, still licking their wounds from their previous heavy defeat at Everton, responded well with Morten Gamst Pedersen firing a rising shot over the bar.
Recalled front man Franco Di Santo also saw a shot blocked in the box before fast-countering Villa came close to a second, Ashley Young's cross missing the top of John Carew's head by inches.
Villa were made to pay for their near miss in the 24th minute when Di Santo chased down Ryan Nelsen's long punt into the box and Chris Samba pounced to prod home the equaliser.
An entertaining game continued to swing from end to end with Young flashing a 29th-minute effort across the face of goal after Milner's deep cross from the right.
Villa's two former Rovers stars, Friedel and Stephen Warnock, had received a warm welcome from the home fans and the giant keeper reminded them of his quality in the 29th minute.
Pedersen's ball into the box caused panic just past the half-hour mark and it fell to Dunn, whose overhead kick from the edge of the six-yard box was somehow tipped over the bar.
Carlos Cuellar bravely headed clear a Lars Jacobsen cross under pressure from Di Santo in the 37th minute as the home side retained the upper-hand.
But hat hard-earned advantage might easily have been wasted in the 41st minute when Pascal Chimbonda needlessly gave the ball away to Milner but his shot from a tight angle was saved by Paul Robinson.
Blackburn started the second half in positive fashion with the increasingly impressive Dunn at the centre of all their moves.
Di Santo squirmed a header wide from a cross by El-Hadji Diouf as Villa became increasingly reliant on quick counter-attacks in their search for a second.
A series of bookings for niggly incidents disrupted the flow of the game and it was Villa who emerged better off from the brief hiatus, Agbonlahor hooking a 61st minute effort just over the bar.
But Rovers' of pressing on to claim the three points were hit by the sending-off of Grella in the 68th minute for a second bookable offence after an unnecessary foul on Milner.
Undaunted, Rovers continued to press and substitute Brett Emerton brought another fine save out of Friedel after Lars Jacobsen cut the ball back in the 83rd minute.
Di Santo had a hopeful penalty claim turned down one minute later after tangling with Milner in the box then Dunn's goal-bound effort was blocked by James Collins.
Rovers were finally awarded a spot-kick in the 87th minute after Di Santo's attempted overhead kick was handled by Richard Dunne - and Dunn stepped up to send Friedel the wrong way.
There was still time for Villa to push forward in search of an equaliser and Robinson was forced into a fingertip save to deny Collins in injury-time.