For me reflection is kind of like a magic trick, because it can hide how the program flows. Kind of like the hat-trick, where the input is the empty hat and the output is the bunny and the how remains a mystery.
Not at all, but typically languages that support reflection are slower for very difficult to escape reasons. Chief among these is that such languages are dynamic, making every function call an indirection (load/call). This forces a CPU pipeline flush for each function call, etc. It's theoretically possible to get around this with <i>very</i> smart JITs, but it's very difficult and depending on <i>how</i> dynamic the language is and how these semantics are used it can have severe limitations.