If you call $user->joinGroup(), this code in the modUser class file should execute:
unset($_SESSION["modx.user.{$this->get('id')}.userGroupNames"]);
It's intended to update the user's group membership during the current login, so adding a user to a user group this way should work immediately. If it doesn't, I'd consider it a bug.
If, however, you also add a resource to a resource group at the same time, that resource might not be available to that user.
There is also an adduser processor, which *doesn't* clear the $_SESSION, but does fire a system event (OnUserAddToGroup), so a plugin attached to that event could update the user's status, though I don't see that processor being called anywhere.