In my experience, I have to use the search/replace tool to replace 4 different elements when I create refresh my test site from the live site. So a "proper" tool would have to:
1. Store the following in data: URL, moodledata location, moodle files location, database name.
2. At admin login, compare those items with what's now running.
3. If different notify the admin and give him/her the option to "update the database" to match the new settings.
4. When activated, search/replace all 4 of those items globally in the database.
5. Work on all supported database systems.
That would be a start. I agree that a "proper" tool would need to allow modules to choose how to do this in its own data, but to get that done would be a monumental task. There would need to be some way to know which table(s) were associated with which modules, do the global search/replace for modules that didn't support the filter, and skip those tables where the module does support it.
Perhaps fixing this a little at a time would help it get better...