Perhaps your confusion arises from not having used an actual terminal. Back when serious computers were the size of several upright refrigerators, a terminal communicated with a central computer over a serial cable using characters and characters only. The characters were part of some standardized character set, e.g. ASCII or EBCDIC, but typically ASCII. ASCII has 33 control characters and the terminal operator sent them by pressing a special key (such as DEL) or by holding down the CTRL key and pressing another key. The central computer only saw the resulting control character; it did not know what keys were pressed to produce the character.
A terminal emulation program such as xterm mimics that behavior. The terminal emulator provides a way to send all 33 ASCII control characters and Emacs will receive those characters if they are sent. But Emacs is like the central computer in the above description--- it has no way of knowing what keys were actually pressed when you run it under a terminal emulator. So if you press CTRL and semicolon, unless the terminal emulation program has mapped those keypresses to some ASCII character, Emacs will not know that anything has been typed.
Terminal emulators typically use the following mappings to generate control characters†:
Note that CTRL+; does not appear in that list. Terminals will usually just send the printable character assigned to key if CTRL+key isn't mapped to a control character. So what your terminal emulator is telling you by sending ; alone is that it doesn't know what to do when you press CTRL+;.
All this applies only if you're using a terminal or a terminal emulation program. If you're running Emacs as a native application under some window system, then Emacs has full access to the keystroke events and not just characters. So Emacs can see that you pressed CTRL and semicolon together and allow you to assign an action to that keystroke pair.
†Terminals often have function keys and arrow keys that also generate sequences of characters that include control characters. These sequences typically begin with ASCII code 27 (ESCAPE).