Nice work, mate!
One thing though, in making it work like the windows dll, you are making it less pleasant to use for those of us that haven't used it in the dll form or that would prefer a more ArmA-native syntax. e.g. I think that:
["rtnCardTxtName", 32] call CardLib;
should be something like:
[32] call CardLibCardName;
(You might also like to make an OFPEC tag CARD_ or something, instead of using the CardLib prefix?)
If you changed the calling methods this way, then running CardLib.sqf would instead load the cardlib (as in "LoadLib" event) and set up all the necessary functions.
I noticed that you use local constants a lot, which you might as well use #defines for. Not something I'd usually hassle anyone about, but since you are already a programmer, I thought I'd point that out.