El código que muestras es totalmente funcional, estás enviando al cliente un código de estado 404, lo cual es correcto. El problema es que PHP envía y procesa los datos de forma independiente al servidor, sin previo paso por las directivas de Apache, (ej.
ErrorDocument), y por ello debes añadir el fichero manualmente con un include: