This is what the mayStop() method of Activity is for. As Jens said, you can also somehow disable navigation until your app is in a state that "allows" it (but beware that if the user refreshes the page, the app won't have any way to know that a previous call was issued → implement mayStop anyway, to warn users).
As an alternative, implement your navigation as events on the event bus, and a central listener maps them to PlaceController.goTo calls, possibly swallowing or deferring them, possibly loading required data before actually navigating, etc.
Oh, and of course, you could also display a "glass panel" with a progress bar or spinner arrows (or just a message) –e.g. in the form of a PopupPanel with setGlassEnabled(true)– that makes all interaction with the app impossible until the RPC response is back (but the "refresh page" scenario is still to be considered).
Web apps are not like desktop apps: you cannot "lock" users in until something is done. They can open the app in another tab/window/browser, they can "unload" the app at any time, and possibly reload it while some action started by the "previous load" is still being done on the server-side.