The cause of the problem here is generally that you didn't provide (or adequately document) a reasonable API to do that thing.
If you did, and the third party was fishing through your internals to do it instead, they're the assholes. That's generally more work than reading API documentation so if the API exists people are likely to use it, which should make this rare.
But if fishing through your internals was the only way to do it, maybe change that if your goal is to not hear from so many angry people after you move things around.
Expect people to use the undocumented unstable interface if the documented stable interface doesn't exist or doesn't work.
But how do you do that with the web? If someone is digging into the actual source of the site, that's on them. But that doesn't mean our team has time to provide and support an API for 3rd parties.
Especially if the service is free, it's not reasonable for companies to bend over backwards to build, support, and maintain an API. One can expect users to build on undocumented and unstable interfaces, but they shouldn't expect the care one might receive if they had a contract to support that functionality.
If you make a service with popular third party extensions and then you make a change that breaks those popular third party extensions, the users are gonna be mad. At you.
The obvious way to reduce the likelihood of that is to publish an API for the third parties to use that won't break. You can say you have no obligation to provide that, and that's fine, but then it's going to break and the users are gonna be mad. At you.
If you did, and the third party was fishing through your internals to do it instead, they're the assholes. That's generally more work than reading API documentation so if the API exists people are likely to use it, which should make this rare.
But if fishing through your internals was the only way to do it, maybe change that if your goal is to not hear from so many angry people after you move things around.
Expect people to use the undocumented unstable interface if the documented stable interface doesn't exist or doesn't work.