I'll let James handle the DNS Endpoint Discovery part of the question, since he's the big advocate of that. In the meantime, see DNS Endpoint Discovery, UDDI and DNS-EPD, and More on DNS Endpoint Discovery.
As for the SIB, and application doesn't really need to discover a bus instance. If you want an app to be able to access a bus instance, you deploy that app in an app server/cluster that is a bus member of that bus. Then the app simply has access to the bus by using a JMS connection factory configured for that bus. See pub/sub in the SIB article and "Deploying message-driven beans and JMS applications into the Service Integration Bus."
There's still the issue of "how does the app know what queues are available?" In JMS, this is hard coded through resource references and JNDI bindings. However, I believe apps will need to be able to bind to these resources more dynamically; see ESB vs. Message Bus. I envision an ESB with a UDDI-like service; an app wanting to invoke a service passes its description (WSDL, perhaps) into the ESB's UDDI, which returns the bindings for the JMS/messaging channels for invoking the service. The app then uses those channels to make the request and receive the response. How would you find the ESB and its UDDI service? For that, you might need DNS Endpoint Discovery, or you might be able to just use pre-configured connection factory.