You sound like you did it all wrong.
That you think that 'Version control was non existent' is bizarre is just, well, naive.
Why did your clients need version control? Was your code not extensible?
You do the install. You sell a support contract. You make it extensible in a repeatable, not modifying the core code, kind of way. You have tools to find out if the client has modified parts of the code they shouldn't have.
A bug pops up, you fix it locally. You then log in to their instance. You deploy the fix.
That's how it works.
That's where you went wrong.