If a usercontrol is not independent (which it isn't in this case), I
would probably go for raising an event. A container which knows about
the relevant usercontrols could then be a "mediator", e.g: take care of
handling an event of 1 control and doing stuff with another control.
I can see several cases where you'd like to be able to do stuff in 1
usercontrol based on input from another usercontrol. For that reason,
we (Variomatic) created a solution with a connection mechanism. This
allows you to connect different "webparts" (which in the end are equal
to usercontrols). Usercontrols can handle events of consumer connection
points, which are raised when a provider connection point provides
"data". You can read more about this on
http://wilcoding.xs4all.nl/wilco/articles.aspx.
Both Sharepoint and ASP.NET 2.0 have a connection mechanism aswell,
although I personally dislike Sharepoint's implementation (too much
plumbing needed).