I have also been thinking about implementing polls for some time. For polls in the context of a chat (1:1 or MUC) this is my proposal: XEP-0004 says the following:
The <x/> element qualified by the 'jabber:x:data' namespace SHOULD be included either directly as a first-level child of a <message/> stanza or ...
The full context for the data is provided by three things ... the place of the form within ... structured conversation (e.g., a message <thread/>)
For <message/> stanzas, the <thread/> SHOULD be copied in the reply if provided. The <x/> element qualified by the 'jabber:x:data' namespace MUST be a child of the <message/> stanza.
This gives us a very natural poll transport mechanism, as follows: <message id="poll1" type="groupchat" from="romeo"> <x xmlns="jabber:x:data" type="form"> <field var="FORM_TYPE" type="hidden"><value>urn:...polls</value></field> <field var="q" label="A or B?" type="list-single"> <option><value>A</value></option> <option><value>B</value></option> </field> </x> <thread>poll-uuid</thread> </message> <message id="pollresponse1" type="groupchat" from="juliet"> <x xmlns="jabber:x:data" type="submit"> <field var="FORM_TYPE" type="hidden"><value>urn:...polls</value></field> <field var="q" label="A or B?" type="list-single"> <value>A</value> </field> </x> <thread>poll-uuid</thread> </message>