Unrideable boats
Solution 1:
You can insert two entities into the boat's Passengers
list at the same depth to remove the ability for the player to enter it.
/summon Boat ~ ~1 ~ {Passengers:[{id:"armor_stand",Invisible:1b,Marker:1b},{id:"armor_stand",Invisible:1b,Marker:1b}]}
Armor stands themselves do not push the player. The Marker
tag will also remove the bounding box of the armor stand to prevent interaction with the player (such as giving the armor stand items).