The Welshman equalized following Cani's opener and, though the Blancos' No. 7 gave the visitors the lead, Giovani dos Santos saved the day for the hosts
The Welshman made his first competitive start for the club since his world-record move from Tottenham and he began repaying his huge fee by canceling out Cani's opener at El Madrigal just before halftime.
Cristiano Ronaldo refused to be overshadowed as he put Madrid ahead with a goal after 64 minutes, but the lead was short-lived as Giovani dos Santos equalized just nine minutes later.
Carlo Ancelotti opted to start Bale on the right, with Isco in the center and Ronaldo on the left behind lone striker Karim Benzema as midfielder Asier Illarramendi also made his first start for the Blancos.
Villarreal made just one change to the side that beat Osasuna 3-0 in its last La Liga fixture, with Dos Santos replacing Jeremy Perbet.
Despite the wealth of talent in Real's ranks, it was the home side which made the more positive opening and twice in the opening 15 minutes Jonathan Pereira was denied at the near post by Diego Lopez.
The Yellow Submarine got the breakthrough deservedly in the 21st minute.
Real failed to clear its lines with Pereira and Bruno Soriano both looking to pounce, but the ball spilled kindly to Cani, who smashed home into the bottom corner.
It could have been even worse just short of the half-hour mark when the influential Pereira played a sublime backheel to Javier Aquino, whose initial shot was saved by Lopez before the goalkeeper stopped the rebound.
Against the run of play, Real did get the equalizer when Bale opened his account for his new club. Daniel Carvajal broke down the right before putting in a teasing low cross and the Welshman nipped in ahead of Mario and slid to poke home with his right foot from close range.
The home side should have been back in front in the 54th minute. Dos Santos backheeled smartly to Pereira and his center found Jaume Costa unmarked, but from eight yards he somehow side-footed wide.
Bale soon departed, withdrawn by Ancelotti, but that was the signal for Ronaldo to take over as he punished the hosts in the 64th minute.
He broke from his own half and laid the ball into the path of Benzema, whose initial shot was parried back to Ronaldo to fire a deflected effort that put Real ahead.
However, the lead lasted less than 10 minutes before Lopez parried Cani's shot into the path of Dos Santos, who drilled home the equalizer.
Villarreal pushed forward for a winner in the closing stages and Cani was denied a second when Lopez produced an outstanding save to stop his rasping drive.
At the other end, Ronaldo almost got the winner for Real in the 87th minute, but his fierce 20-yard effort was parried to safety by Sergio Asenjo.