I think it's driven by a desire for strict validation. They provide XSD schemas and use them internally. Conveyor uses them too which not only helps catch internal bugs, it means if you provide a snippet of XML to do OS integrations the tool doesn't support yet then you still get good error messages at package build time telling you what you did wrong.
There are similar schema languages for JSON these days, but without any equivalent to namespaces. Microsoft uses versioned namespaces heavily in the AppX Manifest. It's got a bit crazy, a typical manifest might have 10 different xmlns declarations, but it means that if you mis-name an element or (more likely) put it in the wrong place that won't be silently ignored, it'll trigger a validation error. To get that you need to able to assign each element to a specific fixed schema and then compose them. If you just have a single schema and evolve it without any concept of namespaces, old software can't tell the difference between a mistake and a new extension from the future.
Microsoft don't have any generically extensible binary format that they use consistently, like Google does with protobufs. Besides, XML isn't so bad.
Look at the alternative: Apple went with a generic binary config format for macOS (binary plists) but then introduced an XML version anyway. As an industry we've never got any good at managing the dichotomy between efficient-for-machines binary formats and efficient-for-humans text formats.