I *think* you are missing the fact that they hide it by copying the "constant" data to ram on startup. This is OK if you have plenty of RAM, or not much "constant" data. But not good for the cases I was talking about.
My experience is mainly with gcc a few years ago, but at the time I looked briefly at other compilers and they seemed to do the same sort of thing. You could work around the problem using PDATA pointers or PROGMEM macros etc but the resulting pointers were incompatible with normal ones. So you could not use e.g. a printf(s), you had to write a separate printf_P(s). And so on, you would need a memcpy_P(void* s, PROGMEM* p) etc, for every function wanting to access the constant data.