The total throughout (in cars/hour) is given by speed divided by effective length.
Effective length is the length of a carriage plus its share of the distance between trains, which is something like quadratic in speed (since kinetic energy also is)
So the total result is something (caution, probably there are other factors here, such as non-carrying cars like locomotives) like:
v
TP = ----------
Kv^2
L + ----
N
Where TP is throughput, v is speed, L is car length, N is cars per train and K is some constant that determines the head between trains.
To maximise throughput, you can't just crank up speed as you start to dominate the line with space between trains (as kV^2 grows). There will be a sweet spot when it is optimum. This applies as long as the braking distance of a train is super-linear, actually, so even if the distance is not quadratic in speed, say it was Kv^1.5, it still holds.
You can make trains longer (increase N) to reduce the number of spaces between trains. But this has its own practical issues.
You can also decrease K with better brakes or sensors that allow to brake earlier. But I imagine there's either a practical limit like forces on the tracks or trains, cost too much, or trains have what they have and can't be upgraded.
You can also make cars hold more per unit length, but that's also difficult in a fixed guage in tunnels.
Finally, if you're running trains as close as you can, there's no point running faster then the slowest train in the system. If a train at any point has to slow to 30kph, say for a corner or climb, that's the speed of the whole line.