You probably wouldn't have any easy access to saved games, and you'd also probably have to write all the network code to go from one mission to the next without disconnecting. I have no idea how hard that might be.
It is neat to think how close to a human player the AI could be made to function as.
Could accomplish it in a different manner I suppose. Just have some mission that reads in some data to decide what "mission" to start on with proper settings and etc. The data could be stored by way of some generic file (missions are DLLs so just read and write a file using the standard APIs) obviously making sure that data is being written and loaded symmetrically on all machines.
As far as continuing a campaign the easiest method I can think of probably involves one mission = one "session" of multiplayer, and at each new session you load in the saved data file I talked about and set up the level properly.
So for example, players starting a campaign:
1. Host hosts a game using special "multiplayer campaign DLL"
2. Players join, game starts
3. Special DLL sees that save file doesn't exist on the machine so it starts with mission #1
4. Gameplay commences, players complete the level, victory condition occurs
5. Game terminates like a normal multiplayer game
Now players want to do "mission #2", so the following happens:
1. Host hosts another game with the same "multiplayer campaign DLL"
2. Players join, game starts
3. The DLL sees the save file and therefore knows it should start at mission #2 with certain data (completed techs and whatever else you want to save). It could call Map.LoadMap and Research.LoadTechtree to load a different map and techtree (this is completely possible, proof of concept is in the OP2 game recorder that I created a long time ago) if you wanted; you could either have all code for all missions in the same DLL or you could get creative like I did with the game recorder to load a second DLL and "patch through" trigger calls and so forth to the actual DLL that contains the mission.
4. Gameplay starts on mission 2, players complete level, etc.
5. Game terminates
Now obviously there would be some special cases to deal with, for example what if all the players don't have the saved file or its contents don't match (might be able to abuse command packets to send arbitrary chunks of data between the clients, I believe that there is some working code that allows sending new command packets over the network, so for example you could transfer checksum or other information)
It would probably be a good idea to checksum things like maps and techtrees if you are loading them after InitProc is called (and somehow send these over the network for comparison), in case these differ / are missing between multiple players.
You would also have to deal with checking to make sure the same players are in each game (or provide some means for their recovery, for example if 3 players did mission 1 but the 3rd player is absent for mission 2 either abort or somehow allow the game to progress with only 2 players). You would have to deal with players in different spots as well (depends on the order of joining the multiplayer session) and check for this (maybe just compare against ASCII names or whatever) and assign the right starting states to the right players.
Finally there might want to be a way to ask if you want to resume if it finds a saved game file (probably display it to the host, and again use commandpackets/whatever to communicate the decision to other players).
The other possible way for continuation between levels would be to somehow reset the simulation at the end of a level (for example victory condition fires, reset game tick to 0, load a new map, load a new techtree). This seems like it would be opening a whole new can of worms and is probably not very easy, so I think the other method I described would work well.
TL;DR -- I think a multiplayer campaign is completely within our reach based on what we already know, a lot of the stuff I learned when building the game recorder/player is applicable here