If you're a charity, you aren't optimizing for max(value_generated) in an immediate way.
If your mission is to help children with cancer, you don't want to spend 100% of your funding on chemotherapy and drug development, because that way, you eventually run out of money (donors die and their cards expire, and you aren't spending on marketing to bring in new ones). You may spend some of it on buying a fancy yacht and organizing a ball for the rich, which will bring in 4x as much in donations as you spend on getting it to happen, and that's the money you spend on chemo and new drugs. If you care about as much money being spend on cancer research as possible, that's potentially a better way to make it happen than spending your donations on cancer research.
Imagine a donor is willing to give you $1m, but you believe you can get up to $500k in extra donations from strangers on the internet if you do donation matching (it's essentially a free marketing campaign). So you ask them for $500k in hard cash and $500k in matched funds. Even if you overestimate and only get $400k in donations, you're still getting an extra $200k of free money.