Security is one of the major reasons, and this is indeed a privileged operation that should not be accessible by all clients.
The other reason is that this isn't base functionality, for example an embedded implementation has no need for screenshots.
The other reason is that this isn't base functionality, for example an embedded implementation has no need for screenshots.
I'm unsure what kind of graphical environment you can imagine where screenshots are not useful at all (if only to capture the screen when something weird is going on).
For debugging purposes, the display server can just dump the screen to a file or a serial port itself. The only reason you would need this in the protocol is so other arbitrary applications could capture the screen.
Also, screen sharing is not that easy of a problem if done properly (eg. allowing another app to act on the buffer and directing it here and there)