Correct method for processing FFT in realtime
There are numerous ways to do this and you have the general flow except, as noted, complex averaging is only done in special circumstance, which you haven’t mentioned and are in most cases not applicable.

One can average magnitude or magnitude squared. There is a 1975 Bell System Technical Journal article that goes into detail but a simple comparison is good enough for most people.

Zero padding a FFT to a power of 2 is probably unnecessary if you use a modern FFT library like fftw.  A library will also offer an optimized real FFT. The other advantage of not using a zero pad is that you can pick your bin widths more intelligently.  It may be convenient for a user to have something like 1Hz or 5Hz or 10Hz bin widths.

The number of averages should have some reasoning as well. 

Depending on your actual application, some filtering prior to your FFTs might be useful. A seismologist might be interested in frequencies below 10Hz, but a lot of other people don’t. Some degree of pre whitening is often useful. 

One can have a “correct” processing chain , but nevertheless underachieve as an analysis tool. 

There is a lot about how to display this information that hasn’t been touched. Real time usually means real time display. 

When I started doing DSP there were a lot of tricks that you can use to save cycles. You can avoid square roots by taking the max( real, imag) - \alpha min(real, imag) where you set any negatives to positives first.  

Another trick is to complex bandshift filter to use a complex fft without redundancy