If an app requests a piece of high shared memory, and that arena is full, the kernel allocates the memory in the low shared one.
I thought we were initially talking about low shared. Well, the amount of high shared memory can be increased by increasing the VAL, as well as the high private. I know people running with VAL=3GiB successfully.
Due to x86, you cannot overcome the limit of the high/low shared memory unfortunately, but each process has got its own private arena, and if you need more memory, spawn more processes (in theory).