The main issue is in synchronizing among threads. If mIRC exported the functions one process could be in the middle of a call when another one attempts to call it.
Im certain mIRC is not reentrant safe wich would most likely crash with an access violation.
Mapped files are system global and managed by the system so only one process can access the object at a time. This is not really an issue in a dll but alot of people are writing external applications designed to communicate with mirc as well.
of course mIRC could manage calls using any of the number of interprocess sync objects it would just be more work. Definately possible tho