Indeed this looks like a bug, but it is unrelated to cascades.
I will explain on your code sample:
$em = EntityManager::create($connectionOptions, $config);
$user = new \Entity\User;
$email = new \Entity\Email;
Just to clarify. So this is a bug in the "persistence by reachability".
"persistence by reachability" means that a NEW entity (like $email) that is associated to a MANAGED entity (like $user) and the association has cascade=persist is automatically persisted on flush().
I still need to write about persistence by reachability in the manual but as you have already found out, it is intuitive since you expect that to happen.