Yes, the function continues after the UP mouse_event, but that doesn't say much about the process of the UP function. I guess even the DOWN already takes some time, as the delay is also showing up without UP.
I constructed a bit more dirty workaround, but it doesn't involve writing a new button function. I make the button react on "over", and check in the function if the _global_MultiTouchActive is off.
#define MULTITOUCH_CHECK if( _global_MultiTouchActive == 0 && mouse_left == 0 ){ return; }
...
void button_activate()
{
MULTITOUCH_CHECK
... do stuff ...
}
This works well.
Didn't yet fixed the delay though, as I didn't involve mouse_event. Right now I need to continue, and choose for the "Hurray, it works, don't touch anymore" (pun) method

.