It sounds like you've seen the MiniScript Integration Guide — if not, that's the primary resource for questions like this.
An event pump is the "standard" design, and you'd get results back either through an intrinsic (as you said) or via a global variable. Or, if it suits your needs, you could have the script print the result, and catch that via the standard output mechanism.
Do you control these scripts you're calling, such that you can be certain they never take more than X milliseconds to complete? If not, then you really need to do this asynchronously. Otherwise a badly-behaved script will lock up your whole game.
What's the structure of the MiniScript code you're calling into? Is it one script per "function" you need, or a library of functions you're going to call on an as-needed basis? Or (worst case) is it a script that will actually be running and doing its own thing, when your C# code suddenly wants to invoke a function in it?