Why does writing 0 to IOSET (ARM7) has no effect?
The functionality is already possible by just writing the IO data output register. But to clear and set bits with it, you need a read-modify-write sequence. Sometimes you have IO pins that are controlled by different RTOS tasks, or interrupts, and it would mean to set output data register you  have to always disable interrupts or scheduling so that the update happens atomically. With separate registers to set pins high and low you don't need to read anything, just control the bits you want high or low.