I really hate the idea of reaching out to the Session from within the function to access variables that you have stored in the session. It ruins the whole encapsulation model that is one of the main points of a component and function to begin with. Doing it this way you might as well just access and fix session vars in-line in a procedural manner. you are not saving anything but you ARE really complicating the session.
The session already has keys and structures - why are you trying to reinvent the wheel?
<!--- /// Return Data value for the supplied key --->
<cffunction name="GetAvailableOption" output="false" access="public">
<cfargument name="Key" required="true" type="string" />
<cfif StructKeyExists( Session, this.LOCAL ) AND
StructKeyExists( Session[this.LOCAL], "Data" ) AND
StructKeyExists( Session[this.LOCAL]["Data"], "AvailableOptions") >
<cfreturn Get(Session[this.LOCAL]["Data"]["AvailableOptions"], Arguments.Key) />
<cfelse>
<cfreturn "" />
</cfif>
</cffunction>
This is little different than simply doing:
<cfparam name="session.something.#key#" value=""/>
<cfoutput>#sessions.something[key]#</cfoutput>
Where "key" is the value you are trying to "get".
If you really "must" do it this way then pass a reference to the session in as an argument along with anything else you need.
It also bears in mind that somethings are passed by value and some by reference. When you cross scopes and destroy encapsulation you open up referential problems where a reference is both in the session and somewhere else. If this happens across say - the application scope - you could end up with a code related memory problems that are devilishly difficult to find and fix.