Intermodule Communication will only help you if the module are located on the same page.
If you're moving module controls onto separate pages, the most thorough way to deal with this is to put a tab drop down in the module settings. Then, when generating links or redirects between module controls, you can then read in the setting, generate the correct url and everything will work fine.
Just create a custom settings control for your module, and in that, have a list of destination pages :
Widget 1 Page : <pagename>
Widget 2 Page : <pagename>
I do this with drop down lists of the non-admin tabs in the currentl portal, then store the tabid into the tabmodule settings. Note that you should use the TabModule settings, to give users the ability to have more than one module instance in their portal.
I blogged about this recently : http://www.ifinity.com.au/Blog/Technical_Blog/EntryId/48/Designing-Structuring-and-Architecting-DotNetNuke-reg-Modules/
For your second question, yes, you can re-use control keys outside of each individual <module> definition. You can see this for yourself, as every module has a 'settings' key, and most seem to have an 'edit' key.
Hope this helps.