1) You can extend xslt with some custom functions that fetch the data for you (http://our.umbraco.org/wiki/reference/xslt/extend-your-xslt-with-custom-functions)
2) Instead of using xslt macros you can use razor macros, which will allow you to write c# code directly in the macro. (http://our.umbraco.org/documentation/reference/templating/macros/razor/).
3) Other than that you could still use either razor or xslt and fetch the data with javascript and ajax.
I would propose to use razor macros, but only if creating new macros, as that would require a total rewrite of the macro, and only ajax as the last way out, unless its dynamic in such way it would make sense.