ThisRace.Opponents = 0 will do nothing if you set it during the race, it makes sense only before the race began.
And when race updates all participants are forcedly have their room changed to current one:
in VehicleBase.asc
protected void VehicleBase::SyncCharacter()
{
<...>
if (this.c.Room != player.Room)
this.c.ChangeRoom(player.Room);
<...>
}
I don't remember all details, but quickly scanning through code shows that each struct has a variable that tells that particular racer or car is active and should be updated.
In Vehicle class this is IsInit variable, and in Racer class this is IsActive variable. Setting these to false should stop game from updating them.
For RaceAI class there seem to be vehicleIndex that must be >=0 , so setting it to -1 might disable the AI.