I'm never going to use this bound, so I don't need the type system to be "aware" of it in the sense that it will let me write code which requires T: Trait. I just need a bool which represents this fact.
No, you can never write a generic function that “do X if T: Trait, otherwise do Y”. You can only write “do X if T: Trait, otherwise fail to compile”.
Having both is “specialization”, and all attempts so far to provide specialization in Rust have been unsound (meaning that your impls_trait would return true sometimes and false sometimes for “the same” type, and even worse things would happen to other situations).
It’s possible to get a similar effect, “autoref specialization”, but that only works with macros and not generic functions, because it’s leaning on method dispatch to select between methods from two different traits, which will never happen in a single generic function.