I must say that I don't really know for sure, but I don't think the table_name/column_name pair has anything to do with foreign keys. I think in your example, they'd be "contact_info" and "state", respectively.
I'm pretty convinced that the acs_attributes metadata stuff was left off unfinished. And you can bet that it's on my task list to fix this. After you've written your list-one-edit-add-blah page flow for the 200th time, you get sad when you have to do it yet again (as I did just yesterday).
We're working on a project right now that's give us ample insight into the form builder and the demands of the real world. We've built a metadata-driven dynamic form-generation system, which will be cleaned up, then released. We've also made some additions and enhancements to the form builder itself, also to be released within a couple weeks.
My longer term plan is to build more and more dynamic-generation things up, with a strong focus on things that have been proven in the real world. I want to make OpenACS an even more RAD platform than it is.