How does the Flask-Gunicorn-Nginx setup works under the hood?
Not quite. Basically flask is the webapp, it gets loaded when gunicorn starts up. 
At that point the flask app is up and running and gunicorn itself can answer requests by sending them to the flask app within its python processes (ie, no net traffic).
Nginx sits on top of gunicorn and proxies requests between clients and gunicorn as gunicorn is not a web server.
So nginx -> gunicorn -> flask (loaded by gunicorn itself)
When gunicorn starts up, it loads and initialises the flask app on its own. Doing that on every request would be very slow.
Nginx just proxies to gunicorn's listening port. It does not load a Flask app by itself, which is really a WSGI compliant Python webapp.
I was wondering how exactly is the request handled, I mean,I think it's something like this:

Nginx receives the request, does initial handling based on configuration,passes to Gunicorn
Gunicorn receives it, and initiate a instance of the Flask app, with the request data
Flask app receives the request data, and does the work it was programmed to

Is it something like this? Does a new instance of the Flask app get initiated at each request?