Redirecionar a porta 80 para 443 é trivial com o iptables, mas a partir da sua descrição você claramente não quer rodar http na porta 443: Você quer que as pessoas sejam redirecionadas de http para https.
Você está claramente ciente de que isso pode ser feito no Apache para cada host virtual, mas você prefere não usá-lo para evitar oops de configuração; caso contrário, a solução do sgtbeano é o que eu recomendaria.
Com base nisso, recomendo que você pare de usar o Apache na porta 80 e que execute outro servidor da Web na porta 80 que faz o redirecionamento simples.
Você pode até mesmo executar uma instância separada do Apache na porta 80 com um diretório de configuração diferente. Isso também evita a configuração de oopses, mas pode ser mais difícil de manter (muitas pessoas não esperam duas instâncias diferentes do Apache no mesmo host com dois conjuntos diferentes de arquivos de configuração). Neste caso, você pode usar a configuração do sgtbeano para a instância da porta 80.