São todos sinônimos, a diferença é mais regional ou social. Em termos de idade, a ordem seria mais ou menos esta (do mais jovem para o mais velho): menino, garoto > moço, rapaz, jovem > cara.
Você raramente vai ouvir um homem no Brasil dizendo "moço", essa palavra é de uso quase exclusivo de mulheres.
A palavra "cara" é mais informal, as outras são mais neutras.
Se você quiser dizer, por exemplo, "I saw a guy going into the house", você pode dizer:
Eu vi um cara entrar na casa. (mais informal)
Eu vi um rapaz entrar na casa. (mais neutro)
Eu vi um jovem entrar na casa. (soa um pouco mais estranho, mas ainda é possível usar).
Resumo: use "rapaz" e você não terá problemas! :)