Why don't we use auto-encoders instead of GANs?
In fact, autoencoders are used for generative tasks. Have a look at Tutorial on Variational Autoencoders (VAEs).
The coolest thing about VAE is that abstract features can be easily amplified or suppressed based on extracted vectors from the latent space. Let's imagine a model trained on MNIST to generate digits. If you take two images of the same digit which only vary in thickness, encode both of them and subtract the two vectors, the resulting vector will be a description of thickness in the latent space. Now you can generate an arbitrary digit and incrementally adjust its thickness based on that vector.