+1  A: 

I agree with the commenter, COM seems like a good strategy. Your support dlls get registered when they are installed, then your core app can look for plugins, something like:

hr = CLSIDFromProgID(L"Wakko.1.0", &clsid);  
hr = GetActiveObject(clsid, NULL, &punk);

or
hr = CoCreateInstance(clsid, ...,..., IID_IWAKKO, ...);

Number8
A: 

Look at the IPC options that windows has here

To me as well COM looks like a good option here.

Another way to do this would be to have your core application running a server which listens to calls from your plugins. You can achieve this by using names pipes. Now, your support apps would use these plugins to communicate (over named pipes) with your core app.

Prashast