As far as I can tell there is no easy way to bring one sprite from one layout to the next without destroying it in one and creating it in the next. In the process you lose all that objects private variables. Now of course the easy way to remedy this would be to change all those private variables into global ones
Yes, there are global variables for that purpose. You can also make an object itself global, in which case it will automatically exist in every layout up from the first you originally included it.
It comes down to carefully designing your game. You should be aware which variables need to be carried over in between layouts and use globals, global objects (array, hash) or even the S plugin.
Problem solved right? Well what if I want to conserve the sprites animation, speed, angles etc. from one layout to the next? That would mean I would have to (right before switching layouts) retrieve all that information and store them in a bunch of global variables in order to effectively recreate my sprite the way it was right before the layout ended and we went onto the next.
You could keep track of all that with variables like you say. But if it comes down to many different variables/states that need to be remembered, you probably should try to use some kind of data structure (again array, hash, S), as it may end up being less of a hassle.
If that is the most effective way to do it then that is alright by me-- my only question then would be, how do you get the position of an object relative to another?
I think the best method of saving a relative position may be simply to remember the angle and the distance between the objects in question. So you can set the relative position of Sprite2 to Sprite1 with using cos/sin.
Set Sprite2.X to Sprite1.X + cos(SavedAngle)*SavedDistance
Set Sprite2.Y to Sprite1.Y + sin(SavedAngle)*SavedDistance