Seconded, belts-and-suspenders. STM32 HAL takes up its hulking 10-100kB for one reason and one reason only: ease of use.
The most obvious case where this would apply, is where something causes a jump to the reset vector -- a soft reset, without triggering the hardware reset signal that actually flops all the flip-flops in the chip. It's not obvious when or why someone would do this, but maybe it's a simple enough solution to a program always crashing: instead of dumping to the default hardware error handler (a spin loop), just go back to start and hope it goes better the next time (ha).
Or given how often callbacks are used in the HAL, and maybe in user code as well -- if one happens to be NULLed by accident or otherwise, which adventure are we going on? Maybe not much of an adventure after all.
You can certainly get away without complete inits in self-contained projects, but also the more stuff you pull in from other places (libraries, other authors, copy-paste..), the less well understood the project is as a whole, and the more potential value there is in using, what would otherwise be, redundant operations like this.
Could also do kinda the flip side, assert register values from time to time -- scan swaths of memory, comparing against images in ROM, looking for inconsistencies. This could also maybe be defensive against fuzzing attacks, power glitching attacks, etc. Though a lot of those specifically target program execution, or private (stack) variables; and, measuring and auditing program state, in a potentially virtual environment (i.e., interrogating C's abstract machine, from within itself, without being hardware-dependent -- good luck with that?), isn't going to be straightforward. Ah, but I digress; I'm far from an expert on computer security, this is just idle pondering.
Tim