Batch renaming in Lr has very limited options IMO (and that includes renaming on import). This is one of the things I prefer Bridge for.
If you are writing the export service, you can name exported files however you want. But, there is no "thoroughly good" way to do it as an export filter (that I am aware of), since each stage must comply with the terms of the downstream stage (e.g. export service), including filename/path expectations.
Nevertheless, subject to some caveats, there is some latitude:
Consider as example:
which supports generic export naming as export filter (post-process action) - read the fine print before using...