You'll have to manage 1,2,3 with your own events.
The plugin doesn't have that built in.
For #1, have the peers save the name of the room, and if they are disconnected, reconnect to the saved room name.
For #2, They should automatically be recreated when something about them is updated that should be synced. The reason they time out is because they don't have any synced data changing over about 3 seconds. I found that if you have the host constantly change a synced variable, such as a bit from 0 to 1 every second or fraction of a second, then the object will be less likely to timeout. There will always be rare occasions that they do, and you will need to implement a means to resync the data of any unsynced variables when those objects are auto-recreated(when something synced in the object changes).
To do this, you can have an unsynced variable such as "sID".. and the host can give it a unique number, then send that number to the peer. It will act like a tagname for the object. Then when an object is auto-recreated, if that variable is set to 0 (default value)- then that means it was recreated and there are potentially unsynced data. Have the peer send a request to the host to send them the unsynced data of that object (the variables that aren't being autosynced).
This way, you will be able to resync the object's unsynced variables of the objects that timed out and were destroyed,recreated. It is a bit long-winded, but I have successfully implemented this procedure and know it works. It just takes a bit of time and testing. To test it, you can simulate the latency via the event that adds simulated latency and then minimize the browser to force the host to stop sending data- this will make objects more likely to time out- in which case you can then test if things get recreated when you maximize the browser and allow the host to continue sending data.
For #3, if the objects are synced, they should be recreated when joining. The peer should destroy all objects prior to joining. The synced objects will be created. If the variables of those objects are synced, the variables will be updated. If not, the host will need to send a message to the peer with the current data for any unsynced variables in the object.
For #4, I don't know. You can try simulating latency and see if it still works. That will give you an idea of real-world situations when lag/etc is incorporated.