One thing to add to Stephen's response is that you can actually sort of do a "sync call" of an orchestration using direct binding, by using direct binding with a request response port, and having the call orchestration return the response message when it is finished. I've used this pattern successfully and it is quite powerful.
One of the benefits of using direct binding is that if you use it correctly you can use it to decouple the calling orchestration from the called orchestration, and this can be a great help when versioning your solution if you design it correctly to take advantage of it. Also, because with direct binding you're using the BizTalk Pub/Sub engine to select the right orchestration to spawn, you can use it alongside custom context properties to "dynamically" choose which orchestration to call instead of having it hardcoded on the parent orchestration. There are a lot of really cool things you can do with this capabilities.
One sample that shows off the direct binding capabilities in BizTalk 2006 in a great way is the BPM Sample Scenario included in the SDK; check out the documentation on it to see how they enable advanced extensibility, versioning and scalability by using reverse direct binding.