If we need GET requests with bodies, why not simply add a body to GET?
Also because a different method means OPTIONS tells you information about what is supported, while overloading GET would not.
And because “same guarantees” doesn't mean “means the same thing”; PUT and DELETE have the same guarantees (idempotent but not safe), but we don't use PUT with no body for DELETE.