If your RETURN (aka Enter) key sends a Control-M character, then you're out of luck: they are the same thing.
 
If your RETURN key sends something different, that is, if Emacs can distinguish what it sends from C-m, then you can distinguish in Emacs Lisp. You can bind [return] instead of C-m.
 
Same thing with TAB and C-i, etc. You can bind [tab] or C-i or both (to different things). But if your TAB key always sends C-i, then you cannot distinguish the two in Emacs Lisp. AFAIK.

I don't quite understand what this means - I have
(global-define-key (kbd "C-m") 'execute-extended-command)
but it also binds RETURN.  How do I make the input events distinguishable?  I'm not running emacs in a terminal.

Is there a way to bind C-m and return to different keybindings?
Yes, of course. The input events just need to be distinguishable for GNU Emacs.