RegionObserver.preIncrement() receives a Result object which it can modify if it wants to return directly to the client. However the only way of modifying it that I could find is through Result.readFields(). That would require the user to create the Result object he wants, serializing it and then deserializing.
I think it would be better to either change preIncrement() to return a Result object or add a setter to Result. We could also change preIncrement() to receive a List<KeyValue> like preGet() does.