Look at how template::element::create works.
It takes any arbitrary named arguments and passes them on to the element definition since element::create is used for every widget etc, and widgets have various different arguments.
So if you call
element::create -one 1 -two 2
then when get_opts is called withing element::create there is an array within the scope of element::create called opts that contains {one 1 two 2}
I am pretty sure it does exactly what you want.