The only real way is to not put functions throwing exceptions into the public interface. Instead, place your protectedRun() function in the public interface, and have it call your throwing functions, catch those exceptions, and (most importantly) correct the problem that resulted in an exception being thrown.
Fundamentally, however, the fact you have functions throwing exceptions and are trying to force the manner in which they are caught shows that your library has a severe design flaw.
The whole point of exceptions is a mechanism to report an error condition that (a) cannot be corrected where the condition is detected and (b) the condition must be corrected before anything else (other than program termination) can occur.
Trying to dictate that the caller must immediately catch the exception and correct the cause is pointless. If the caller cannot correct the cause, but was somehow forced to catch it anyway, the only option available would be to rethrow the exception. Apart from additional runtime overhead of catching and rethrowing, that has the same effect (stack unwinding) as if the caller does not catch the exception at all.
What you need to do is think carefully about WHETHER OR NOT it is appropriate for functions in your library to throw exceptions at all. Because it is not the responsibility of the caller of your library functions to catch exceptions. It is the responsibility of your library functions to throw exceptions in a manner that makes sense to the caller.
There is also a basic concern that, depending on your toolchains (compiler, linker, etc used to build the DLL versus those used to build the calling program) and environment (host system, etc) exceptions may not cleanly cross a DLL boundary anyway.