How can a person reasonably prove they're running a full node? I mean running themselves in a computer they control and not just fetching blockchain data from a public blockchain API or something like that.

I imagine that may be impossible, but there could at least be some operation that is trivial/fast to do with a local full node that's difficult/slow to do with a blockchain API.
Imagine an interaction/protocol/technique exists you could perform with a node in the network, and at its conclusion, the interaction teaches you whether the other party is a full node.

Now anyone who wants to pretend to be a full node can simply relay all messages related to this interaction to another full node, and relay its responses back to a potential querier.

So this is effectively vulnerable to a man-in-the-middle attack, but you aren't querying for a particular identity, just whether some computation was performed. As there is no secret data involved here, there is no solution to the problem of one entity pretending to be another.

Overall this shouldn't be a problem; you generally don't care whether someone else is performing full validation; if you would, you could be doing so yourself instead and not care about the behavior of other nodes.