If you directly manipulate renderers, render windows, etc. then their state is usually not saved in the scene. Make sure you modify MRML nodes instead. For example, you can change view background as shown in this example: Documentation/Nightly/ScriptRepository - Slicer Wiki
How do you add sounds?
You apply transform to a volume to set its position in the world coordinate system. A transform is automatically created if you grab and move a node using a controller. Transforms are stored in the scene and used when you reload the scene.
Currently we only save magnification component of PhysicalToWorld matrix in the view node (vtkMRMLVirtualRealityViewNode). View position and orientation is set when you activate virtual reality display, based on the view position/orientation in the regular 3D view. View position/orientation in the regular 3D view is saved in the scene. So, if you save the scene then view position/orientation in virtual reality should be saved/restored by scene save/load.
For low-level customization, you need to build Slicer and then build SlicerVirtualReality extension. However, you should be able to do many things by just Python scripting. Let us know what exactly you would like to do and we can give advice for implementation.