The vote would have to be on the chain, in a format that all clients understand. In other words the mechanism of voting will have to be set in stone, forever (any change to that mechanism would be a hard fork). And I would be very wary of anyone claiming to have a distributed voting protocol that is secure and with correct, safe incentives and which itself can't be subject to DoS or withholding attacks. This is complicated frontier stuff people are still working out.
See
http://blog.ethereum.org/2014/02/01/on-transaction-fees-market-based-solutions:
"Fortunately, cryptocurrency is all about democratic consensus, and every cryptocurrency already has at least two forms of consensus baked in: proof of work and proof of stake. I will show two very simple protocols for doing this right now:
Proof of work Protocol
If you mine a block, you have the right to set a value in the “extra data field”, which can be anywhere from 0-32 bytes (this is already in the protocol)
If the first byte of this data is 0, nothing happens
If the first byte of this data is 1, we set block.basefee = block.basefee + floor(block.basefee / 65536)
If the first byte of this data is 255, we set block.basefee = block.basefee - floor(block.basefee / 65536)
Proof of stake Protocol
After each block, calculate h = sha256(block.parenthash + address) * block.address_balance(address) for each address
If h > 2^256 / difficulty, where difficulty is a set constant, that address can sign either 1, 0 or 255 and create a signed object of the form [ val, v, r, s ]
The miner can then include that object in the block header, giving the miner and the stakeholder some miniscule reward.
If the data is 1, we set block.basefee = block.basefee + floor(block.basefee / 65536)
If the data is 255, we set block.basefee = block.basefee - floor(block.basefee / 65536)"
But again, there's no reason Etherium has to be structured that way. Include execution counts in the transactions, and base fees off that explicit amount. During validation check that the execution counts are correct (and invalidate the transaction & block otherwise). Delay script execution until transaction is included in a block, and black list outputs of transactions that fail this validation check so as to provide an economic cost to DoS attempts. Problem solved.
Thats all in the design (execution count, fees above). The open question is how to set the base fee and is there a way to structure them flexible?
I am not a Ethereum dev and also dont know the current state of the internal discussion. As far as I see they are still researching for the best solution.