Hey @tyrese
are you then also returning the result of the function? Or how exactly do you want to make it usable?
You can - I just had to test it, since I have frankly never used it before xD - actually return a function as Custom Code Data Element
return function(bar) {
_satellite.logger.debug(">>> BAR", bar);
};
And then call it from a Custom Code action.
let func = _satellite.getVar("DE Function");
if (func) {
func("foo");
func("bar");
func("hello");
}

Although as a best practice, I would rather go for a dedicated rule with helper functions placed in one or more Custom Code actions to not scatter this functionality across the Launch property.
So my recommended approach is typically one of these two
a) create a "Library Loaded" rule with Order "1" with a Custom Code action that declares a dedicated window scoped library object with its own namespace and place the functions in there
window.myLib = window.myLib || {
foo: function (bar) {
_satellite.logger.debug(">>> foo called with", bar);
},
hello: function (world) {
_satellite.logger.debug(">>> hello called with", world);
}
}

b) append these helper functions to the _satellite object, bearing in mind that in the future the library may end up getting its own function with the same name, so tread lightly there
But yes, technically it's possible to have function Data Elements