Odion Ighalo found the back of the net in the third minute of stoppage time at the end of the Liga clash at Anoeta to cancel out Carlos Vela's opener on 73 minutes and snatch a point for the visitors.
The result means Sociedad must wait to secure a place in Europe's second-tier competition next season, with Villarreal still in with a shout of finishing sixth.
Sociedad are on 58 points with two games remaining, while Villarreal are five points back in seventh, also with two to play.
Sociedad have another chance to claim sixth place against Athletic Bilbao in the Basque derby on Sunday, but should they lose that and Villarreal beat Rayo Vallecano a day earlier, it will come down to a straight shoot-out between the two sides on the final day of the season.
In San Sebastian, both teams were reduced to 10 men after Granada's Recio and Sociedad's Mikel Gonzalez were sent off in separate incidents within two minutes of each other early in the second half.
Vela put the hosts ahead on 78 minutes with an astute finish from Alberto De La Bella's cutback before substitute Ighalo swooped late on to convert Jeison Murillo's cross, amid appeals for offside.
The point sees 15th-placed Granada move onto 38 points, three above the relegation zone.
- Sports & Recreation
- Carlos Vela
- Odion Ighalo