Thanks to all who helped me with the question pertaining to static classes.

What I've done to solve my issue is to completely re-design the engine from the ground up. Here is the result.

class D3D {};
class DirectDraw {};
class DXGraphics:public D3D, public DirectDraw {};

class DXInput {};
class DXMouse:public DXInput {};
class DXKeyboard:public DXInput {};
class DXStick:public DXInput {};

class DXSound {};
class DXSoundSample:public DXSound {};
class DXMixer:public DXSound,public DXSoundSample {};

class DXEngine:public DXGraphics, public DXInput, public DXSound
     HWND MainWindow;
     HNSTANCE MainInstance;
     ....blah blah blah

So you see I was thinking backwards. The engine is composed of all of these items and using this hierarchy it should eliminate access problems. The HWND and HINSTANCE are first passed to the DXEngine constructor by the user and then those are passed on or can be accessed via DXEngine. DXSound and DXInput either need one or both of these variables prior to being able to function.

Whaddya think??