O código de solicitação não é passado para a atividade iniciada automaticamente porque ela não precisa (e não deveria) saber esse valor. Ele só precisa saber o que fazer e não de onde começou.
Iniciar uma atividade é apenas outra forma de chamar um método. Quando você chama um método, você recebe o resultado de forma síncrona (bem ali onde você fez a chamada). Nesse caso, você está apenas passando as informações de que o método precisa para fazer seu trabalho. Você não está dizendo de onde você fez a chamada.
Iniciar uma atividade é o análogo assíncrono de chamar um método, caso em que você recebe o resultado no método especial onActivityResult (). Neste método, você precisa saber o que fazer com o resultado que acabou de receber e você tem o código de solicitação para isso.
Para deixar um pouco mais claro por que não é uma boa ideia passar o código da solicitação como um parâmetro, considere a atividade de exemplo que mostra um produto que você pode comprar. Nesta atividade, existem dois botões rotulados "Comprar" e "Login" (já que você não está logado no momento). Pressionar "Login" iniciará uma atividade chamada "Login", que tentará fazer o login do usuário usando as informações fornecidas. Pressionar "Comprar" iniciará primeiro a mesma atividade de "Login" e, se o login for bem-sucedido, inicie a atividade de compra.
Agora, o botão "Login" usa o código de solicitação 1 para iniciar a atividade de login, mas o botão "Comprar" não pode usar o mesmo código de solicitação, pois terá que fazer algo diferente se o login for bem-sucedido. Portanto, o botão "Comprar" usa o código de solicitação 2.
Na atividade "Login", você pode receber dois códigos de solicitação diferentes, dependendo de onde foi chamada, mas você precisará fazer exatamente o mesmo procedimento.
Portanto, se você passar o código da solicitação como um parâmetro, acabará com o código que precisa fazer o mesmo para alguns códigos de solicitação diferentes, como:
if (requestCode == LOGIN || requestCode == BUY) {
// ...
} else ...
Você também terminará armazenando as constantes do código de solicitação em um local central, por exemplo, uma classe chamada RequestCodes.
Em suma, o código de solicitação deve ser usado apenas para decidir o que fazer com o resultado recebido. Dessa forma, você terá um código mais modular, mais fácil de manter e de estender.