This is a bit of an old topic but since I found it via a google search people in the future will likely see it too, so here are my two cents:
Using a modal form is almost the same as having a loop with Application.ProcessMessages in it. The .ShowModal function literally contains this a repeat-until loop with Application.ProcessMessages inside of it.
BUT:
If you don't use a modal form then Application.ProcessMessages will execute things like clicking on buttons on other forms than the modal form which isn't desired while you wait for the javascript response. Meanwhile .ShowModal blocks the use of all other forms except the form it was called from.
So either use a modal form as the easy way out or add a boolean that is set while waiting for the response in a loop with Application.ProcessMessages. All event functions for gui interaction should check that and exit if it is true. Problem solved.