I have this list of LibSodium primitives, which should I pick so that the implementations tend to be interoperable?
For symmetric encryption (encrypt data with a key, decrypt with the same key) use crypto_secretbox functions or possibly the crypto_secretstream functions. This seems to be what you want for problem 1. 

Crypto_generichash() is not an encryption function. It's a hashing function. It takes in a message and spits out a short value known as a hash. The hash is unique per message, and different messages tend to have wildly different hashes. There is no known way to find out what message created a given hash faster than just trying all messages. Likewise there's no known way to find 2 messages that result in the same hash faster than trying all messages.

Problem statement 2: The function names should be the same in the libsodium bindings for all languages. XOR is a logic operation, not a stream encryption function. 

It is worth thoroughly reading the documentation, and probably some tutorials about encryption in general. Some of what you're confused about (hashes vs encryption) is very basic, a bit like someone not knowing the difference between equality comparison (==) and assignment (=) and wanting to implement binary search. It makes it a bit difficult for me to formulate a useful answer. There is NOTHING WRONG with not having learned this stuff yet, it's not obvious or generally taught in school. If you want to learn a lot of this I suggest Dan Boneh's coursera course. It's a free graduate level course.

TL;DR: You probably want crypto_secretbox_easy(), though I'm not totally sure based on your short description.