Glad to help! And I hope it was an excellent holiday!
To answer your questions, I’m not positive – I’m fairly new at some of that stuff. I can give a couple theories though:
For the first question:
The UFUNCTION() identifier is a macro used in compilation to allow Unreal to see and use more information about the function. I don’t know all the details, but I’ve noticed the engine doesn’t always notice functions that don’t use the UFUNCTION() macro. The phrase “reflection system” is often used in conjuction with these macros, but I don’t know much about that yet.
I think the more important part has to do with the click registration. It seems to require that the handlers you use are UFUNCTIONs. I assume it has to do with the mechanic used internally to call the function when the click actually happens. Unfortunately, I haven’t found the details of that mechanism so I can’t speculate much further.
If I recall correctly, when you try to register a non-UFUNCTION for click-handling (or other similar actions), you’ll see a message in the output log that indicates the issue. I don’t recall the exact phrasing, but you could try it if you like.
As for the Blueprint vs. C++ issue:
Can I presume that the Blueprint version is pure-Blueprint without any C++ functions in the pawn? If that is the case, I know the Blueprint stuff (editor and compiler-equivalent in particular) does a lot of work for us. I’d imagine it knows the “function” (event, if I recall the terminology) that handles the click needs certain identifiers and so adds them invisibly.
If the pawn still uses some C++ code even when working primarily with Blueprints, there’s another possibility that has to do with how the Blueprint code invokes C++ functions. That’s seriously speculative on my part though, and wouldn’t be my first bet.