Либо еще проще - использовать один GWT модуль и сделать две разные страницы с div'ами, у которых разные id, а в EntryPoint написать нечто вроде такого:
RootPanel.get("admin").add(new AdminWidget());
RootPanel.get("user").add(new UserWidget());
Соответственно страница admin.html будет иметь элемент div с id="admin",
а страница user.html будет иметь элемент div с id="user".
Конечно классы AdminWidget и UserWidget должны наследовать Composite, проще говоря - они должны быть простыми виджетами. По-моему, очень простое и элегантное решение.
Все сказанное выше имеет смысл, если вы не хотите делать несколько модулей.
А для того, чтоб посетители не скачивали ненужный код JS-файла в Google придумали CodeSplitter, который асинхронно загружает код в момент его вызова (отдаленно напоминает RPC-вызов). Вот ссылка:
http://code.google.com/intl/ru-RU/webtoolkit/doc/latest/DevGuideCodeSplitting.html