I wouldn't be so dramatic about hard fork. People will not change their software unless they are 99,99% sure everyone else is going to do the same. If there is no way to "vote", then nothing will change. If block size limit or some other rule will get in the way of many users, everyone's desire to find a good enough mechanism of voting will get stronger until it is finally found, implemented and the change is applied.
No miner, user or developer is going to "unpredictably" change any rule if he is not sure others are doing the same. There is no nuclear situation at all. If someone is not smart enough to update without a proof of consensus, he and his customers will suffer. But not the whole network. Thankfully, there are plenty of businesses, nodes and miners, so stupidity of one of them will not significantly affect trust in the network.
I guess, we already have a way to vote for an new proposal using block version numbers:
https://en.bitcoin.it/wiki/BIP_0034Say, "block version 3 increases limit to 2 Mb". Miners who agree with that will upgrade to version 3, but still keeping the block size under 1 Mb. If > 90% of the blocks is version 3, it will show the consensus. Those who disagree (including non-mining nodes) will have data for calculating their risks. We can see that 90% consensus is possible only if 90% of miners really believe they have a lot of valuable transactions, not spam, and that it's profitable for them to increase the limit. If only a couple of miners want to increase the limit, there will be no consensus.
When the miners vote, the natural question is whether miners have opposite interests to those of other full nodes. I think the interests are aligned in case of a block size limit. Every node that creates transactions, competes with other nodes. And the more transactions the node creates, the more expensive it is going to be (think bitpay, coinbase etc.), hence the bigger incentive for them to accept larger blocks. When they see majority of miners accepting new rule, they are going to accept it too with probability proportional to their transaction expenses (which is proportional to number of transactions). In the end, the opposition to miner's consensus will consist of only nodes with little originating transactions. And these remaining non-mining nodes may choose not propagate new blocks, but it does not matter as there are a lot of other nodes who will. Disagreeing minority of miners will of course prefer certainty of block rewards to the risk of producing orphaned blocks and will accept the new rule.
Last point: if the suggested block size limit is too high, people would have more reservations against it. If, however, it is only 2x the current limit, the cost of bandwidth and storage is much easier to calculate, so everyone would feel good enough. And if it works out well for everybody, we can do another round of increase when new limit is filled up. If it does not work well for everybody, miners will simply create smaller blocks.
In the end, I don't think anybody would bother upgrading until we start approaching 1 Mb limit for real. When we will, it will be much clear for both miners and non-miners how much the change is desired.