Please describe your actual bug.
I'm trying to understand how you actually hit a problem here, since you're talking about two unrelated things: the NewRequest function for making client requests, and the internal finishRequest method on the internal response server type. I don't believe it's possible to get a Request.Body as returned by NewRequest down into the server type, since the *Request there will always be from ReadRequest and have an internal Request.Body type (*body, etc, from transfer.go).
The reason for that "if !w.closeAfterReply" bit is to avoid reading to the end of a huge request to get to the next request in a keep-alive series of requests if we're going to hang up on the user anyway. But that's not _your_ *Request. It's just the same type, used in different ways.
But if Russ thinks he sees why this is "Yuck", I'm all ears.
To me, the Yuck is that we re-use the *Request type for the client and server with similar-but-different uses of 80% of the (ton of) Request fields, but that predates me.