For example the the openzeppelin crowdsale contract has a function that sends ether to a wallet address. Could this method include logic to send 60% of the funds received to Alice's wallet and 40% to Bob's wallet?
This is called payment splitting.
It does not need to be built in to the crowdsale smart contract. You can simply create another smart contract that is a payment splitter. This splitter contract will split incoming payments in any programmable way.
For the crowdsale contract then just set the splitter smart contract address as the benefactor wallet.