That is due to the nature of terminals. The limitation is inherited from the old-style physical terminals, which communicated with computers via a serial line. Though in principle, the protocol on that serial line could have been used to encode all kinds of modifier key usage, in practice it just encoded ASCII. Later this was extended to include escape sequences for things like arrow keys and function keys, plus perhaps some eight bit characters. Modifier keys like Ctrl and Shift merely zeroed some bits from the code of the key being pressed (for the Ctrl key) or turned lower case into upper case, and numbers into symbols (for the Shift key).
So there is no way for a terminal emulator like iTerm2 to communicate to the attached Emacs process that the shift key (or ctrl key) was pressed together with the return key.