I'm prone to believing that you shouldn't try to fight the capabilities of a language. I'd think that creating hashes on the fly would be somewhat expensive, though as you know, sending a ton of parameters over is also expensive.
You mention creating wrapper functions but does PHP support function overloading - i.e. the function is named the same but it has variants that take different types and numbers of parameters. If so, at least you avoid the problem of namespace pollution.
The other alternative is to use objects to encapsulate the logic - instead of the swiss army knife of dictionaries. Create a class that has all the various parameters sert to defaults. Set up some getter/setter functions to allow you to alter the defaults. Pass the object to the function. Or better yet, have the function be an encapsulated method of the object.