End mid loop() @ sensor input, how?

Is there any better way to do this?

Yes

I need the function at several places in my code

No you don't

Use millis() to implement non blocking timing and you can read the input each time through loop().

Save the millis() value at the time that the start action happens, such as setting the PWM value for an LED. Then, each time through loop(), check whether the required wait period has elapsed by subtracting the start time from the millis() value now. If the period has elapsed then change the PWM level save the start time for the next time. If not, then go round loop() again taking other actions such as reading inputs, but don't block the free running of loop().