Why not? Why make something more complex than it needs to be. Simplification and unification should be attempt in a system that is used for a database of similar items. Sometimes vowels are missing, sometimes they aren’t. Sometimes it’s a full name where it fits, sometimes it isn’t. It’s baffling.
Fundamentally, they're an internal code and as long as everybody knows what it means it doesn't matter exactly how it's reached.
I have two questions: why is XYJ Weaver Junction when there is no X or Y in the location name?
Not sure, but these are not TIPLOC codes. CRS codes start with X for junctions, no idea on Y, J probably for Junction.
And why is Gatwick Airport LGW if you arrive by plane, but GTW if you leave by train?
The Airport is London Gatwick Airport, but the station is just Gatwick Airport. But Airport codes are a different beast, look up CGP Grey on YouTube.
I believe CRS codes are required/intended to share the same first letter as the full station name.