Poor play by V1 for sure but if you can put yourself in his mindset, his line is not THAT crazy. Calling the 3B is obviously bad but if he is someone who is optimistic and stubborn, he's probably not folding much of anything to a 3B, so he's going to the flop with a very wide range. On the flop you didn't mike a super-size bet and again he's sticky - he's got a pair and a gutter so he's going to call for one street to see if you give up or he makes the straight. Then V2 calls and the turn is a brick so he would have probably folded to a turn bet. But V2 checks, you make a strange tank check and the river is another brick. Now he's thinking you gave up and he's not sure about V2 but hoping he missed a draw. He doesn't want to check and have to face a big bet from either of you, but he's afraid to bet big. So he splits the difference some compromise small bet.
He definitely made terrible decisions on every street but this is how a lot of live low-stakes players think in my experience. In addition to all the poor early decisions, I feel like his biggest error was not following his own logic all the way through. As played, if I were him I would have jammed on the river - he chickened out but could have won the pot if he followed through. Not defending his play but understanding the thought process of weak villains is important.
You basically got max value here. Knowing what the results highlight about this player, I think the fold/call/3B decision pre-flop becomes clearly 3B, and maybe bigger than you went if he is so sticky with super-marginal hands. Flop size is in the right range. I still think all-in on the turn may have been better given ranges, and may have been more straightforward with a larger 3B pre-flop. But definitely well played and congrats on taking down a big pot. That's a juicy game you're in!