Heat butter (if using) and olive oil in a medium pot over medium–high heat (if not using butter, add 2 more tablespoons olive oil). Add onion and season with salt and pepper. Cook, without stirring too much or too frequently, so they get nicely browned and frizzled over 5–8 minutes.
Using a slotted spoon, transfer ¼ of the onions to a small bowl; set aside (for topping!).
Add the beans and season with salt and pepper. Using a wooden spoon or spatula, smash some of the beans into the pot, breaking them up to release the creamy, starchy interior.
Add the broth (or water + bouillon) and bring to a simmer. Simmer until the texture is to your liking, 15–20 minutes or so. Add the cabbage and vinegar, stirring to wilt. Simmer until the cabbage is totally tender, 10–15 minutes.
Remove from heat and stir in half the dill. Divide among bowls and top with more dill and some of those reserved frizzled onions. Drizzle with olive oil (or a knob of softened butter) and crack of black pepper.
