When writing a custom iterator, many times the iterator has some semantic knowledge of what each Key/Value being returned actually means (e.g. A word count could be returning Key/Value but really is returning an Integer/Long count in the Value). This forces the client to know what is going to be returned and handle the cast/transformation.
I believe it should be fairly straightforward to encapsulate this transformation inside the Accumulo client code. I plan on investigating the possibility of changing the ScannerBase impl, or perhaps making a TypedScannerBase, in which the iterator at the "top" of the stack for a scan can return something other than a Value to the client.