First I would like to make the distinction between user as the user of an application and user as the user of an object.
How we program has to do more with the user as a programmer using an object. In that case I program assuming the programmers that will use my object know what they are doing. Because I can't do anything otherwise. Another thing is that restricting access to a variable makes sense for code that uses the object (telling them not to mess or change this variable) but that restriction does not make sense for other kind of objects: Factories, constructor methods, editor objects, etc.