What do you do to pass information between forms? Forward is straight forward (sorry) using Properties or maybe parameters in a New() or DoStuff() method, but what about se
If it's a matter of a main form creating an instance of another form, waiting for the form to do some work and then close, and checking it's result, then having public properties or listening for events makes the most sense. Neither of these things would be impacted by having the forms in different assemblies. You do get an explicit binding contract between the two forms, but if the properties were described (as you suggest) in a public interface, than as long as everyone agrees to the terms of the interface, you're good.
I'm not sure how much more complicated you'd want this to get. In the past I've used a static singleton object for holding application state. The app-state object would expose event handlers that other parts of the program could listen to. The main form would create the app-state (just get a reference to it really) and listen to certain events on it. Then the main form would create child forms and controls to do work. The children would change properties of the app-state object, which would in turn fire events that the primary form would listen for. This way the various forms and controls were decoupled from each-other. The downside is that they were tightly couple to the app-state singleton.