First of all no reason to apologize for the ascii art. Works fine for me.
You asked three questions, I'll answer two.
You can create a router. The router can use any strategy you like to return a string with the channel name. It could get it from the message header, or get it from storage based on the payload hashcode or guess it from the stars if you have an algorithm for that. The easiest way to create a router is to put a MessageEndpoint in the context that has a method annotated with @Router. The cafe demo has an example of that.
How can I invoke dynamically a channel?
Methods can either accept payload or message. Spring Integration will unwrap and toss the message if your method wants the payload, or just pass you the message if your method wants the message.
How can I receive a Message at an Endpoint given a certain payload type without loosing the Message?
(note that I haven't compiled any of my samples, so they're just for illustration)
@Router public String routeMessage(Message m); //will get the message
@Router public String routePayload(your.domain.Payload m); //will get the payload