I think I have the answer for the first two:
__() and _e() are functionally the same; they translate whatever text is in the parentheses. __() returns the translated text, whereas _e() echoes the translated text out.
What does _x() do? Are there more? I think I saw someone reference _c() but I haven’t seen it used anywhere yet.
Thanks for the help!
Looks like the only special thing about _x() is that it lets you provide a context for the untranslated string–I guess in circumstances where a word might translate differently in different contexts.