Well, it isn't really that mIRC needs a pause here, the problem is that until AFTER the part event, the nick is still on the channel. Using /timer 1 0.. (or /signal without the n switch) delays the execution until after the event has processed. Another way would be to use /updatenl before you do the processing, keeping in mind that this will also impact other scripts that follow this file in the load order.
Code:
on *:part:#:{
  updatenl
  <rest of code here>
}

The same is true for quits. Until after your script has finished processing the event, the nick is still 'live' and on any common channels.