Why exactly is a bit/radix reverse required when calculating the fft?
One reason typical implementations of a radix-2 FFT require a permutation at the beginning or end is to reduce the use of any temporary memory when using a procedural/sequential processing engine.  When using a single complex array, larger than, say, the CPUs register set, for both the input, output and intermediate results, the intermediate butterfly results have to go somewhere in that array.  But the place most appropriate for a non-permuted result might still be occupied by unprocessed input data.  So you could either use more memory to save the unprocessed inputs somewhere else, use more memory to put the intermediate results somewhere else, or just put the results in an array location where the input data is no longer needed (e.g. the butterfly input locations).

If you allocate a full new array for each FFT radix-2 layer, no post-shuffling will be required.  You could also ping-pong 2 arrays, but that's still double the memory.

If you had enough parallel ALU units that no temporary result are required, and the entire FFT result is available at once at the ALU outputs, then you could also write out the FFT result without any permutation.