Blind signatures
One easy way to let users swap tokens is to let them request the authority re-issue tokens blindly. This is how e-cash works but here instead of issued notes being redeemable for currency, they allow you to take the survey or request a blind signature on a new note.
Blind RSA signatures or blind Schnorr signatures would be the way to go.
Note that this allows ballot box stuffing. The results aren't verifiable.
Another option would be to carry out the survey initially and blind sign the responses. Later, the participant uses another anonymous channel to submit it. This is essentially the proposal of [this answer].(https://crypto.stackexchange.com/a/106630/19869)
The difference between the two responses is that blind signing a key for later use lets you choose the responses during submission, whereas blind signing the response has you fill out the survey during the first contact and returns a bundle for later submission.
Linkable ring signatures
Another option that gets rid of the authority would be linkable ring signatures. This is the same thing used in CryptoNote based currencies.
Back’s Linkable Spontaneous Anonymous Group (bLSAG) signatures
Users cast a vote by creating a ring signature from one of N
keys, their key, and N-1
decoys. There's some extra magic that prevents a key from being used twice by having a "linking value" in the transaction that depends on the actual key used for signing.
Users get a token that allows them to publish a key to the list of allowed keys. A ring signature using keys from the allowed set allows for submitting a transaction. Transactions either add a new key to the set of allowed keys or submit a survey response.
Each resulting vote can be seen as a tree of possible inputs with each transaction being a node that leads to other nodes eventually bottoming out to the original keys tied to the tokens sent via Email.
The green nodes are the keys, ring signature and votes submitted by one user. Notice how they link their vote to multiple transactions and through those transactions to many of the original non-anonymous keys. This creates a directed acyclic graph of links between votes and the original email linked keys.
The authority must not know the secret key corresponding to the non-anonymous keys. If they do, they know the the linking value used to prevent double spending and can link it to the transaction that spends it. No anonymity is provided by using it as a decoy. The Authority can use the voter's published public key or the voter must use that initial key to mint another (with a simple non-ring signature) before using it later.
Someone needs to run the ledger but they don't need to be trusted except not to delete transactions outright from it. Either have the ledger operator sign receipts for collected transactions or do a distributed ledger as in traditional blockchains.
performance and anonymity
The only reason to use this method is to have the results be verifiable.
The anonymity provided is less than that provided by blind signatures and performance, code size, everything else is worse. Good anonymity requires either monstrously sized ring signatures or that users submit multiple key minting transactions that form a well connected tangle. Participants that collude can reveal where each node actually goes removing it from the graph of honest transactions and reducing anonymity for non-honest users.
Recent work "Omniring: Scaling Private Payments
Without Trusted Setup" makes this scale a lot farther since they get ring signature size and verification time down to something logarithmic in ring size. Ring signature generation time is still linear but that's a per-user cost.
In theory a downloadable app could implement this sort of protocol.
Your users need to be using an anonymity network
I'm assuming users have access to anonymous channels (IE:participants are using TOR or I2P anonymity layers so the polling organisation can't just match user IPs to votes. If you want something that's robust to that you'll need a real e-voting protocol.
Good e-voting protocols that allow groups of users to combine votes together so that the organisers only see the final tally are going to require multi round protocols between the people doing the combining. That might not be practical if everyone isn't online at once or can't leave a long running program open to run the protocol.
Email and a web browser
A web browser is a program that runs web pages. Allow users to download your "application" which is just an HTML page with embedded javascript that does all the crypto stuff. That's all you need to do to deploy arbitrary applications. In theory you could embed an entire implementation of TOR to be used over a websocket.