Você tem algumas perguntas aqui, vou tentar respondê-las em ordem.
That is, I thought the concept of ports was to facilitate machine-to-machine communication. If everything's on the same machine, do they even need a port number open to communicate?
Sim e não. Quais portas são usadas para permitir que vários serviços baseados em IP conversem entre si. Isso não significa necessariamente que é de computador para computador. Isso realmente significa que você está falando com um serviço baseado em IP.
So the main question here is how to adapt the above example file for the case where everything is installed on the same server, and Glassfish used mod_jk as simple pass-through from Apache webserver?
O exemplo está correto, você ainda precisa especificar a porta ajp, caso contrário mod_jk não será capaz de se conectar à instância. Mesmo achando que está na mesma máquina, você ainda está fazendo uma conexão de soquete IP - é apenas através do adaptador de loopback e não de um adaptador padrão como eth0
A second question would be, what is the maximum number of maxThreads one can set? (Is this limited by AJP13 protocol, or something else?)
Eu acho que é apenas um INT - mas eu sugiro strongmente NÃO definir isso para as configurações mais altas - começar em algum lugar 256 é um bom ponto de partida e monitorar o que está acontecendo com seu aplicativo e quantas conexões realmente precisa.