Guest 2 kindly supplied me some materials that allow me to investigate this.
Using my most acute detective powers I was able to discover the cause.
I use only the MPLS file to find the language code for each playlist item. But strangely, the MPLS does not have STN table entries for all the streams. For example, the table omits PID 0x1102, while all the other audio PIDs are present. So, the number of declared streams is 7 but EAC3TO (and my demux menu) shows 8. A similar situation applies for the PGS streams. The missing items are exactly the ones that are missing their language code in the demux menu.
So now, I was thinking "where the heck does EAC3TO get the language code?" First I thought it might be the M2TS file, even though I long ago failed to find language codes in M2TS files. I copied 00983.m2ts to a temp folder outside the BDMV tree and ran EAC3TO on it. No language codes were given. So it's not using the M2TS files.
I know what you're thinking...the CLPI files! So I went into the CLIPINF dir and renamed 00983.clpi to 00983.clpi~ and ran EAC3TO on the MPLS file again. No language codes were shown! Then I looked at the bluray spec and found that the CLPI files do indeed specify a language code. Thus, I need to parse the CLPI files to resolve this.
Arguably,
gonca was right that this is likely an authoring problem, as there is no rational reason for some streams to be excluded from the STN table of the MPLS. If the CLPI parsing turns out to be reliable I will switch to that for getting the language codes.