I must agree with op. Always end up with enough stuff to arm a personal army.
Even more ways to fix this problem!
If you have two low of charisma, some people will not deal with you.
If you join a faction that is an enemy of the vendor, they will not deal with you.
Less places to sell all the junk people collect, so less caps they end up with. It will also add more realism.
You forget shops restock, npcs respawn and the player can sleep forever. Even with one shop you could just keep killing npcs, selling their loot and sleeping until shops restock and npcs respawn.
Vendors should just pay plain nothing for most items but they should always have something the player wants. So that the player has always less than he wanted to spend.