You can always include any arbitrary directory in the filesystem into your classpath and allow them to be relative. I updated the documentation to say “path” not filename, that is a good suggestion.
On the root element, there is a logicalFilePath attribute. That attribute allows you to control what liquibase considers to be the filename/path of the file, regardless of the physical location. So if you ever need to move a changelog file for some reason, you just need to set the logicalFilePath attribute to the old filename/path.
Splitting and merging files gets trickier. I thought about adding a logicalFilePath attribute to the changeSet tag, but if you have large changelogs that would be too many to set and would be too error prone. My theory has been that there is not really any need to split or merge changelogs. If you feel yours is getting too big simply create a new one and use the tag. If you really wanted to, there is a precondition you can use to control if a changeSet would run based on the old id/author/filepath.
Also, remember the databasechangelog table is a regular table in your database and you can do whatever you feel safe doing to it outside liquibase as a last resort. ClearCheckSums simply sets the md5sum column to null. In your case, you could run some update statements to set the filename where the filename=what it used to be.