I don't know whether it is important for Scott, but the following example is failed to compile.
..............
int main() {
  typedef make_features<mpl::vector<int, char, double> >::type f1;
  typedef make_features<mpl::vector<double, int> >::type f4;
  BOOST_MPL_ASSERT((boost::is_base_and_derived<f4, f1>));
}

In other words the order of "features" is taken into account.