The main problem is that the "correct" formatting is very specific to locale; eg in most of Europe instead of "12,345.67" it's "12.345,67", India uses groups of 4 instead of 3, etc.
Sure, but you need a way to tell the API that, which is why you end up with those huge localization APIs. That's why it's out of scope for the standard library.
If you want to do it yourself, it's pretty simple, though, just wrap the value in a struct SeparatedU32(pub u32); and implement Display for it. You should be able to use something like: