What puzzles me actually as someone who was done a lot of programming in many languages is why this is so difficult to ressolve. Though I admit I make a few assumptions about how events are being handled. I assume the following;
1. Events get stored as objects.
2. When a new planet is colonised the game randomly selects an event.
So that being the case I suggest the following;
1. add two new element types to the event xml
<onlyforraceattrib>
And
<notforraceattrib>
Now they can choose to only allow one of each of these tags which is good enough to solve the synthetics issue by including the later tag in all inappropriate events with "synnthetic" in it.
So to then make these tags work in game.
1. Load the events into objects as before , the objects need new attributes to hold the content of the new tags. Thats not complex.
2. When a planet is colonised the game randomly chooses an event as normal then it checks you race attributes against the new properties of the event and if not appropriate disgards it and rolls another event, repeat until you get one that fits.
That doesn't sound like a difficult implementation, an I making a wrong assumption about how it currently works maybe?
This solution is also very modder friendly and will automatically work for custom synthetics and allow events only applicable for other attributes of races too giving the event system a lot more depth.