I don't think we should mandate add_subdirectory calls to come in a specific order. Even if we can hack something in the superproject to do it, users who use add_subdirectory manually will need to get the order right. I know this is a kind of trade-off. At least for the super-project it is kinda easy: You already have a function which includes dependencies recursively. All you need to do is do the depth-first.
For users who add_subdirectory the boost libs I admit this is an issue. But to me this only means that Boost authors should avoid relying on configure-checks which need other libs and where required use the Boost::* aliases so the error in case it was not added is quite clear. Users then need to make sure to e.g. add Boost::predef and Boost::config first. I don't think this is too bad.