I did some experimenting with LEGO1.DLL recently, and here's the results.
Only the swaps that did work are listed.
Objects that can be used as hats:
Buildings, which can be hats, (and plants!) :
Head textures:
Chest textures:
Body colors:
Hats:
Some interesting things I found while viewing LEGO1.DLL in a program called DLL Export Viewer (not listing all of them, because some I'm uncertain about what they are) :
class LegoEntity * __cdecl PickEntity(long,long) 0x1003ddc0 0x0003ddc0 84 (0x54)
class LegoSoundManager * __cdecl SoundManager(void) 0x10015710 0x00015710 112 (0x70)
class LegoVideoManager * __cdecl VideoManager(void) 0x10015720 0x00015720 123 (0x7b)
class MxBackgroundAudioManager * __cdecl BackgroundAudioManager(void) 0x10015730 0x00015730 34 (0x22)
class MxDSObject * __cdecl CreateStreamObject(class MxDSFile *,short) 0x100c0280 0x000c0280 40 (0x28)
class MxEventManager * __cdecl EventManager(void) 0x100acf40 0x000acf40 50 (0x32)
class MxMusicManager * __cdecl MusicManager(void) 0x100acf30 0x000acf30 77 (0x4d)
class MxNotificationManager * __cdecl NotificationManager(void) 0x100aceb0 0x000aceb0 78 (0x4e)
class MxTransitionManager * __cdecl TransitionManager(void) 0x10015900 0x00015900 120 (0x78)
public: __thiscall LegoWorld::LegoWorld(void) 0x1001ca40 0x0001ca40 3 (0x3)
public: __thiscall MxDSAction::MxDSAction(void) 0x100ad810 0x000ad810 8 (0x8)
public: __thiscall MxDSFile::MxDSFile(char const *,unsigned long) 0x100cc4b0 0x000cc4b0 9 (0x9)
public: static void __cdecl LegoAnimationManager::configureLegoAnimationManager(int) 0x1005eb50 0x0005eb50 124 (0x7c)
public: static void __cdecl LegoBuildingManager::configureLegoBuildingManager(int) 0x1002f8b0 0x0002f8b0 125 (0x7d)
public: static void __cdecl LegoModelPresenter::configureLegoModelPresenter(int) 0x1007f660 0x0007f660 126 (0x7e)
public: static void __cdecl MxOmni::DestroyInstance(void) 0x100b0690 0x000b0690 41 (0x29)
public: virtual __thiscall MxDSAction::~MxDSAction(void) 0x100ada80 0x000ada80 25 (0x19)
public: virtual __thiscall MxDSFile::~MxDSFile(void) 0x100bfed0 0x000bfed0
public: void __thiscall MxDSObject::SetObjectName(char const *) 0x100bf8e0
public: void __thiscall MxTransitionManager::SetWaitIndicator(class MxVideoPresenter *) 0x1004c470 0x0004c470 111 (0x6f)
Some of it seems obvious, such as the Sound and Video Managers.
The MXTrasitionManager seems to be what controls the transitions that occur when entering/exiting a vehicle or building.
I'm not quite sure about the MXDS file(s) it mentions.