First, a clarification: the assumption with ServerRequestInterface is not that it will parse the data; rather, it's that a process along the way will parse it and create and return a new request with the parsed results. getParsedBody() exists because in a typical request, you may want to do this once, but access it multiple times; without it, your code needs to parse each time it needs body values, and is coupled to the logic for parsing. This is true of the other methods that correspond to superglobals as well.
For client-side responses, the story is different: you typically parse exactly once, and then consume only the values returned. As such modern client libraries like guzzle provide toolchains for doing this kind of work, often using map/reduce-style functionality that returns something at the end — and API wrapper libraries are using such results in fluent, DSL-like classes.
In other words, the parsed body values are one of many sources of input for a server-side request, but they are the primary result of a client-side response. As such, different treatments.