Well you're right in that it doesn't look like casting a ballot in a box, but in practice they very much do "vote" in the sense that they decide on what rules are valid or not. This is what prevents miners from colluding and changing the rules of Bitcoin, the nodes would reject their chain. This is also what prevents developers from introducing a backdoor into the network by releasing malicious code. Node operators can vote to reject a change by not upgrading their nodes.
Inversely, if there is a rule change and the nodes of the network go along with the rule change (by their decision on what to reject or accept), then this is akin to a motion passing. The validity of blocks is not some ethereal thing, and neither are Bitcoin rules written on stone tablets by God. These things are the result of very human deliberation and code commits (by humans).