Callum O'Hare gave Villa an early lead but Adrian Popa quickly set up Barrett for the equaliser and then Ben House to put the Royals ahead.
Villa keeper Jed Steer saved Barrett's spot-kick before Jack Grealish laid on the equaliser for Harry McKirdy.
Popa produced his third assist for the winner - running at the Villa defence before teeing up Barrett to fire home.
The result meant the sides swapped places in the table, with Reading going third.
Both teams are in action again on 30 October with the Royals playing West Bromwich Albion at Kidderminster and Villa entertaining Newcastle United at Walsall.