I think the output parameter really needs to be a `git_config_backend_iter **` not just a pointer, so that a new value can be allocated.

Also, I suspect some backends may want to support the "match" behavior natively instead of relying on the wrapper to do all the regex matching for them. It would be nice to pass in the pattern (or NULL) as a parameter when the iterator is initialized. That way, the backend can choose to narrow the search. (E.g. if your config backend is a database, it could do a select narrowed by the pattern so that the traversal of the matching config items was very efficient.)

I'm on the fence about whether we need a way for the backend to communicate if it supports the pattern matching, or if the front end should just always apply the pattern filtering knowing that with a smart backend, the patterns will just match 100% of the time.