Hmm, actually there is a problem in your SCRIPTF_ExecuteAsync implementation.
The CScriptHandle type should be received by value, and not as a pointer. The call to AddRefScriptObject is also not needed (in fact, it doesn't do anything for the CScriptHandle type).
You see, the CScriptHandle is really a value type, and not a ref type. It represents an object handle, but it doesn't have a reference counter by itself (much as a handle itself doesn't have one).
The function should be like this:
static void SCRIPTF_ExecuteAsync(asIScriptFunction *pfunc, CScriptHandle ref, float t){
//...
pscript->Execute(pfunc,...,&ref); //basically finds a free context, prepares it and executes in a concurrent manner
}
No changes to how you register it with AngelScript.
Observe, you were able to use it the way you were before, because behind the scenes C++ will send the CScriptHandle as a reference since it is a complex type. C++ reference and pointers are equivalent in the native calling convention. But that was just luck on your part, and is most certainly not portable to rely on this. :)