What I do is have the worksheet function return an ID that's the dictionary key of a C# object.
Other worksheet functions can use this ID to retrieve the C# object from the internal dictionary and return the properties of the object.
This works well for RTD type scenarios, under the hood my RTD functions are all C# objects with lots of properties that I can selectively display using other worksheet functions.
As an example, I have a "=Debug("A1")" array function that uses reflection to populate a range of cells with the values from a complex C# object.
hope that makes sense! :)