The basic theory of unreal packages is every object in the engine exists in a package. That package could be in memory(if not saved yet) or on disk. When an object is created it is created a part of a package. When the package is saved all the object in the package are serialized in the stream. If any objects in that package reference objects in other packages then a record is saved that tells the deserialization process where to find the object in another package. All this information is rolled up in to the package file.
This brings me to the reason for the post. I've been working on a system for my game engine for managing resources. Since I don't know exactly how it was done for Unreal just the basic theory behind it I've has to fill in the blanks with my own ideas. So this is how it works.
Package cubePkg = Package.Create("MyCubeMaps");
Package texPkg = Package.Create("MyTextures");
CubeMap cm = cubePkg .CreateObject
cm.Faces[0] = texPkg.CreateObject
cm.Faces[1] = texPkg.CreateObject
cm.Faces[2] = texPkg.CreateObject
cm.Faces[3] = texPkg.CreateObject
cm.Faces[4] = texPkg.CreateObject
cm.Faces[5] = texPkg.CreateObject
cubePkg.Save();
texPkg.Save();
Package.UnloadAll();
cm = null;
//Now to load and create the object from disk just call.
cm = Package.LoadObject("MyCubeMaps", "MyCubeMap")
The last call will load all the textures for the cubemap from the MyTextures package when it constructs the MyCubeMap object.