@Tobye - I had to do something similar to this, and while this might be a terrible way to handle it, it worked for what I needed ;)
I started by creating a dictionary to hold UID-IID pairs, so when I created an object, I added an entry to the dictionary with the UID as the key, and IID as the value. Then retrieving information from that object during an expression was something like:
I ran into some problems when I removed objects though, as that can change the IID causing the info in the dictionary to be incorrect. To fix it, I just ran a loop that reset the IIDs for the objects stored in the dictionary.
Like I said, maybe not the right way to do it, but it worked for my needs. Of course if I find out there's already an expression in there for this, I'll lose it ;)