Your assumption is quite good "constant concurrent users" means that Gatling will create a new user as soon as a user is destroyed (at the end of their scenario).
The graph, on the other side, displays the number of active users during a second.
As I guessed, your scenario is pretty short (only one request), so it can run in less than a second.
Just to be clear: a scenario is the steps that a single user will perform during their life.
So, as your scenario is pretty short (only one request), the user life will be.
With your simulation configuration, you are requesting Gatling to create new users as soon as they die.
Direct implication: at any time, there exist nbUsers users, but during a second, we can see more active users.
To picture that. Imagine a queue to the post office. If every time you look at it, it may contain the same count of people, people come and go as they are served. So during a period, the total amount of people in the queue will be larger than the queue itself.
constantConcurrentUsers is here the queue length
the graph shows the different people in the queue during a period
Is that more clear?