The base rule is that you can only access a LOB column once. To access a column you invoke a getter on it.
The exceptions to that rule are getBytes and getString, which allow you to invoke those two getters as many times as you like, given none of the other getters has been invoked already, and additionally one other getter as the last invocation.
The reason for the exception to the rule is to avoid breaking existing applications that work correctly. getBytes and getString () are different because they always materialize the value. With materialized values you don't have the problems with stream positioning that you have [in Derby] when serving content off a store stream.
The fact that you can invoke getBytes/getString multiple times is not really an important thing to note in the manual. What users need to know is that you can only invoke a getter once on a LOB column. If we document the special behavior of getBytes/getString, it is to allow user to understand the behavior they are seeing in their application. Some users may use/abuse that for convenience - that's fine as long as they know their large objects are small object
Don't hesitate to ask further questions if my explanation is unclear.
 ResultSet.get[Bytes|String] and Blob.getBytes/Clob.getSubString are different as the former alway fetch the whole value, whereas the latter allows for fetching only parts of the value.