The voting for small parties problem could also be address with multiple ranked choice voting.
That way, candidates who don't win, can have their voters submit second and third choices, that are count when or if their primary choices don't win.
That way, people can vote for their actual favorite, while without taking their vote away from a second favorite with better chances at winning a seat.
This is especially important for positions like president, where only one candidate CAN win (some countries achieve the same with multiple rounds of voting, but you can theoretically achieve the same representation in one round).