There are at least a couple ways that I have seen this done (and done it myself).
A. Create multiple control entries in your Module Definition:
This would give each control a keyword that you would pass to the NavigateURL method to "call" another control. This doesn't restrict admins seeing it at all as long as you make all the controls "View". It does have the disadvantage, I believe, in that when you are showing your "alternate" controls, you would lose any other modules on the page.
B. Create asp:panel controls within your main control and manually read a querystring entry to determine which panel to show.
You could still form the link to the "alternate" controls using NavigateURL, but your module would need to read the querystring and determine which to show. The other controls could also just be shown from postbacks and not use the querystring (this has disadvantages if your users are going to use the Back button). This potentially makes your control fairly large and you will need to look out for things like doing processing in a control that isn't shown, etc, but it gives you quite a bit of flexibility.
Hope this helps,