Ballots don't need to be secret, they just need to be anonymous. If you get rid of the secret constraint, it becomes fairly easy to produce a trustworthy voting system:
1. Immediately before identifying at the polling location, each voter takes a nondescript strip of paper out of a large container of numerous strips of paper, each with a unique identifier printed on it. (No one but the voter knows which identifier they took. No one can force a specific identifier.)
2. The voter fills in the identifier on a Scantron-style paper ballot. (Easily digitized, with a paper trail.) The ballot box scans the unique identifier and spits back out out any ballot with an identifier that wasn't generated for that polling location. (Ensuring no one can force a specific identifier.)
3. A list containing the entirety of every ballot is published publicly, including the unique identifier. (The voter can look up their ballot later. It becomes difficult to coerce a voter because they can say any one of the published ballots is theirs.)
4. A list of names of people who voted is published publicly. (Registered voters who didn't vote can check if a ballot was cast in their name. This is already done in many places.)
You can also have mail-in ballots with user-generated statistically-unique identifiers (requiring only several rolls of a die, so anyone can do it at home), but you can't prevent voter coercion that way.