This is indeed a common problem, and hints on the grapevine seem to suggest that Opscode (now known as Chef, I guess) are aware of this and are working on a solution. Hopefully this is something we'll see in Chef 12.
The problem is that Chef is a Configuration Management system. It is not strictly a provisioning or orchestration product. Knife attempts to solve this problem, but on an extremely rudimentary scale. Other products, like Ansible and Puppet, are more equipped to tackle this issue. But again, even they aren't strict orchestration products either and still fall short.
I haven't had a chance to use it myself, but you should check out http://deis.io/ . It is an open source, lightweight platform-as-a-service that seems to address the orchestration problem. It might be what you are looking for.
Another option is to use something like https://github.com/coreos/etcd for inventory management. It allows you to have a centralized system inventory api that is very flexible, and offers more than Chef's own search data. With that you could write cookbooks to look up other systems and services and take steps to connect to them. It begins to get hokey, but you can always have Chef execute an ssh command that executes a command on a remote instance.
Anyway, just a couple of suggestions. Hope that helps.