This is intended behavior. If you wish to use any part of a cookbook in another, you have a dependency on it. Generally speaking, the best practice is to declare that dependency in the metadata, so that the Chef Client downloads the dependent cookbook.
However, when the dependent cookbook is not required for the default use, it isn't a hard dependency, so the author might not set it in the metadata. There have been many mailing list and irc discussions about having "unnecessary" cookbooks downloaded and "laying around" on the client nodes. The "least surprising" thing would seem to be that a dependency is set. But some people think that the least surprising thing is that code that isn't absolutely necessary isn't a dependency.
So in other words, nginx isn't required by the recipe. It is on the implementor of the cookbook to ensure that the dependencies for optional features has set them up. Chef isn't a mind-reader and doesn't know that you want to use apache or nginx, and there are only cookbook-level dependencies, not recipe level. So the cookbook would have to depend on both apache2 and nginx. Of course then the people who don't want to use either would get mad that code they don't need is downloaded .
The way around this is either:
1. Add a dependency
2. Include the dependent cookbook's recipe(s) in the node's expanded run list.
I'm closing this "Not a Bug" because it is the intended behavior to use either specific dependencies, or put cookbooks on the run list.