tell units / bots when they are killed, kill or respawn

Your idea of using properties on the API is good, I don't think there is any reason to change that. I'm just arguing against passing the Unit instance to the Bot.

I'm not sure I understand what you mean with passing all the state into the bots update method, but as long as you just provide bots with serialized data it should be fine!