You are right, it is exactly as you say: end users are the users of an end product or service, while users are all the users and stakeholders who interact with the different phases of such a product or service.
Regarding your second question, it is a well-known problem known as overlapping. I have written a rather detailed article on User Roles and UML overlapping on this topic (and made some other considerations), so I will not elaborate much, but quote only the part that is of interest for this question:
In his book on use cases Writing Effective Use Cases, Alistair
Cokburn addresses roles in the Unified Modeling Language (UML) and
defines the various parties involved in use cases as Actors.
(...) The system proposed by Cockburn is widely used in UX, but its
clear systemic conception makes it very difficult for us to
dialectically explain the different users and their roles.
Moreover, in UML roles are never connected, although this rule is
often violated by the overlapping process. Clearly, a system in which
rule violation is the norm is not very consistent or precise.
(...) Let us take a simple example: I create a website for a client
(user). The client provides personnel to manage the website (users).
These resources are split between administration (users) and content
creation (users). And, of course, the website that results from this
synergy is experienced by ... users.
My role then will be to make sure that all the users involved in the
process, at their different stages and with their different roles,
have the best possible user experience.
This simple example, translated into UML, is extremely complex, and
almost all roles can fall on the same actor.
Let us say the customer uses a website creation service, e.g.
WordPress.com, Wix, etc. Then she decides to create content. And of
course, the content is displayed on the website to see how it looks.
In other words, 3 roles in a single actor in one of the most common
processes we can imagine (having a website)

In the figure above, we see how the Cockburn model must violate the
rules of UML through overlapping.
And yet it is still not clear who the users are and where they are
involved in the process, at least dialectically.
In short
Once the programmer interacts with the final product, he becomes a final user, at least momentarily.