It's very much a "what works for me", but any accounting system that supports an account hierarchy (which ledger seems to) can have some form of budgeting "bolted on".
At my bank, I have a "Chequing" and "Savings" account (that's their use, anyway). I use GnuCash for Android as kind of an additional data layer on top of my bank accounts.
In GnuCash I have a Savings and Chequing account I manage, but I've got a whole separate hierarchy of "bank accounts" called "Budget". Under that I build a whole tree of "Bills", "Planned Purchases", "Car", "Credit Card Payment", etc. When I get paid I transfer the appropriate amounts into the various "budget" accounts to plan for my bills and such. The displayed amount for my "Savings" account is actually "money that is not allocated to anything right now". (The true total is Savings+Budget.)
If I pick something up on my credit card (e.g., buying something online), that expense gets logged against my credit card right away and I can just transfer some money from Savings/Chequing/Budget into my "Credit Card Payment" budget item.
It doesn't really provide me any forecasting, and I can't really set up "future bills", but once I move the money into the budget accounts it's essentially "spent", so it serves the purpose just as well.
(As an added benefit, I've set up the expense accounts to more or less mirror my budget accounts, with some additional ones for the unbudgetted day-to-day. I can always get an accurate picture of "how much have I spent on <x> since I started tracking", which is interesting.)