"Opus cuts audio above 20kHz" - Is this normal for lossey audio codecs?
You mistake the sample rate for the audio cutoff rate.  If the sample rate is 48kHz, the absolute maximum frequency that could even theoretically be represented with a lowpass signal is 24kHz (I am not getting into bandpass theories since the 20Hz subsonic band is just too small to be useful for transferring high frequency content).  In practice, you need more leeway to avoid aliasing problems.

So 48kHz is a reasonable sample frequency to use for signals cutting off at about 20kHz.  Now you are asking whether this is customary for lossy audio codecs.  The principal of lossy audio encoding is to throw away information that psychoacoustically is supposed to not be relevant.  Since human hearing is supposed to basically be constrained to the 20Hz-20kHz range, it is not in the least surprising that the range above 20kHz would not be subject to encoding.