Ok, primeiro obrigado a Mikko por me levar à resposta. Eu só queria postar uma resposta que pode ser diretamente útil para qualquer outra pessoa que possa estar na posição em que eu estava. Além disso, isso é baseado em um momento Eureka, então pode não ser tecnicamente correto, mas é assim que eu vejo.
O grande problema que enfrentei foi que no MySQL eu podia ver a tabela de ponte como uma tabela individual! (desculpe, não posso postar uma imagem do meu diagrama EER, mas não pareço ter privilégios suficientes no momento) Então, presumi que Java também veria a tabela de ponte como uma tabela! Bem, não. Essa tabela de ponte não existe realmente em Java como uma tabela convencional, na verdade é representada pelo tipo de coleção de tabelas opostas que você associa a ela.
A maneira mais fácil de ver isso para mim foi esquecer completamente a tabela de ponte e me concentrar nas duas tabelas 'reais' e associar os dados nelas. O código a seguir NÃO é uma prática recomendada, pois estou simplesmente definindo o role_id, mas tudo bem apenas para mostrar meu ponto.
List<Roles> userRoleList = new ArrayList<Roles>();
Users currentUser = new Users();
currentUser.setUserId(userId);
currentUser.setUsername(email);
currentUser.setPassword(password);
Roles userRole = new Roles();
userRole.setRoleId("2");
userRoleList.add(userRole);
currentUser.setRolesCollection(userRoleList);
getUsersFacade().create(currentUser);
Espero que ajude qualquer outra pessoa que esteja lutando com muitos para muitos relacionamentos.
(NB. Editei o código da pergunta original para usar uma lista em vez de uma coleção para facilitar, mas você também pode usar qualquer outro tipo que atenda às suas necessidades.)