My guess (and this is a guess) is that it has something to do with memory safety.
A reference effectively just points to a location in memory.
Inside the map you conceptually have 2 arrays - one for the keys, and one for the values. When you perform a “find” on the map it looks up the object based on the key and returns you a copy of the value.
An important note: the map is wholly responsible for how it manages its memory internally. As soon as you return a reference to something inside the map, all bets are off on what you’re pointing to.
Let’s say we wrote a function that returned a reference to the object in the map. You now have something that points to the block of memory within the map that holds your value.
What guarantees does the map make about how it handles things in its memory? None. In fact, if something adds or removes items to the map is allowed to allocate new (or shrink) memory it uses. When it does this, it doesn’t do it in place. It will allocate a new chunk of memory somewhere else, copy everything into it by value, and then point future queries to that chunk. Your reference is still pointing to the old stale block of memory.
So now you’re in the situation where you have a reference pointing to an object in memory that, depending on happens to the map, may or may not be valid. You can argue that 99% of the time you know you didn’t modify the map after you got the value, but as soon as this becomes a feature that the map offers it will be misused. People will cache those references. They’ll forget not to modify the map during a loop. And so on…
I promise that you don’t want the pain that comes with dereferencing the memory that was freed when the map reallocated. And the map won’t tell you when that happens. You won’t know. And dereferencing that freed memory might not even do a bad thing at first. It might take a few frames for something else to reuse the memory and fill your referenced object with garbage. And you might not notice the bug that comes from that memory corruption until a few frames later in another entirely unrelated system. And you’re working in blueprints without a debugger.