Most importantly, the name decoration should be the same. As long as that's the same, you could always regenerate the .lib file.
As for the new unit ideas, my forced export project was actually going to dabble in that area a little bit. I'm going to have to spend a lot of time working out the Unit class hierarchy though. That's probably going to be a big job. But, once that's done, you should just be able to derive from those classes, and override the virtual member functions. You'd also be free to add new non-virtual functions, but you wouldn't be able to override the existing non-virtual member functions in any significant way. (Your explicit calls would go where you wanted, but the game's explicit calls will still go to the old ones). Not that it should matter, since anything remotely important seems to be handled by a virtual function.
There is an issue with saving and loading games though. During saving, the virtual function table pointer in each class is converted to the unit's map_id value, and then the full unit image is written to the file. During loading, it loads the unit image, then using a temp unit record (local variable to some function), it creates a unit of the type specified by the stored map_id, and copies the vtbl pointer over from the temp unit to the loaded unit data.
If you wanted to add new units, you'd need to extend the UnitTypeInfo*[] table. It's a fixed sized structure, so you'd probably have to overwrite all references to the old table to point to a new extended table. I believe this table is part of the Sheet object in my comments file, so you'd need to watch for both global and local references to it.
Actually, the saving/loading part isn't the full deal. It also converts the Unit* pointers for the linked list into unit index values (which is probably why things like IsDead check for -1), and there are also two virtual member functions, OnSave, and OnLoad, that will convert the memory format to/from a file format. Note that after calling OnSave and writing the image, it then calls OnLoad to undo the changes and continue playing. You can use those two functions for any additional format changes that are specific to your unit type.