@Uncle Entity, its just how dynamic linking works, symbols are resolved. Its not related to makefiles. I could even not include the header and have this line instead.
extern void BLI_convertstringframe(char *name, int frame);
All it needs is the function definition to compile the code, Ofcourse loading the module outside of blender would fail (as in a normal python interactive session or script), it has to be in the same process as blender.
@Cyborg Dragon, it wouldnt slow down blender development, why would you want to write a plugin and maintain it externally?, its much nicer if its in blender by default, then you can tell people who to use your tools without having to go download some file for their OS - 32/64bit etc. It means you get updates and builds for all OS’s with no effort, if its distributed with blender (as a plugin or integrated) users can always access without hassle.