I agree that it would be good to better distinguish between compile-time features and runtime/user-changeable features.
However, I wonder a bit how many of the build flags in the *features.gni files aren't actually used in buildflag_header() targets, and why not (or whether that'll cause more confusion).
For example, in ui_features.gni, 6 of the 7 variables are in a declare_args() block, and 6 of the 7 variables are used in //ui/base:ui_features, but those aren't the same 6 (enable_hidpi isn't a declare_arg(), and optimize_webui isn't used in :ui_features).
If everything in these .gni files was in a declare_args() block, I might be tempted to call the files *_build_args instead of buildflags, but if they're not all build args, that might also be confusing.
(I'm not sure I have a better suggestion here, unfortunately).
-- Dirk