Sorry for the late response.
For your first question "Is it for code reuse since you use these JS methods elsewhere?" the answer is Yes, I pretend to reuse this JS method along my tests every time I look for specific radio buttons...I have others cases where I found labels, inputs, parent inputs, etc. etc. the framework is supported in a 90% of JS, why? because it's a very dynamical framework where testers look for Username label in DOM and it has a relationship with an text input so I get the id and don't let testers to inspect the application is being tested. Sorry if I don't explained myself...
Secondly, you said something that really surprised me, "One would think that what works in a browser's javascript/developer[...]"...
As far as I understand, javascript can be run from console (i.e. Google's dev tools console) and selenium interface JavascriptExecutor, I think the only command cannot be run from the interface are those specifically created to support the console.
Reading docs:
it says: Because of cross domain policies browsers enforce your script execution may fail unexpectedly and without adequate error messaging.
So if we don't care too much about this, my next question is Why should I care about using selenium's native methods?
Correct me if I'm wrong (I don't have the code at the time of writing this post), but ...Selenium native mathods like findElementByCssSelector,findElementByXpath or any other like these, aren't they supposed to be a javascript call at the end of the day? if this is correct, what's the problem of calling JSExecutor.
And lastly... about returning the string, that was because I was debugging,but normally I convert it to string because i get id, name or any other value as string not as a WebElement or any other data type.