Davide,
GWT is not really made to be deployed as multiple GWT compilation units. This is done for the sake of performance.
I had similar requirements as you I needed to be able to co-host multiple GWT applications on one page (a portal system) but they are compiled separately and developed by other teams. There was also the need to communicate between those applications.
GWT can host multiple GWT applications on one page. The code is loaded in an IFrame so there is no risk that the generated classes would clash.
But at the same time, you can not just simply pass those objects between the GWT applications since the same Java class does not generate the identically named JS class.
So, I am using a JSNI API that allows me to pass some basic object types between the different applications (JS Overlays are nice for that purpose).
Another thing to consider is styling. If you use plain CSS stylesheets make sure that they can coexist. If you use CssResources, then you need to make sure that the generated CSS names do not clash, that is possible because you can define a prefix that should be used by the generator (or even implement your own naming mechanism).
The 2b option you describe is interesting, but no I did not try to go down that road. That would actually mean that we need to ship our sources to the customers, which is not allowed in our case.
David