I can think of two ways of approaching this.
The first is to use shared nodes. Basically, the file node (in your example) would really live under one structure (probably the one that is more stable, such as date), and your application could process the metadata and create the alternative structure and create a shared node for the file node. That your application has to programmatically create the shared node is the big disadvantage to this approach.
Also, if the original content is actually stored in a non-storage connector (e.g., the file system connector, svn connector), then alternative structure and the shared nodes would probably need to be stored in a regular storage connector (e.g., disk storage, Infinispan, or JPA connectors).
Note that the JCR specification does dicate some peculiarities in how shared nodes are treated: basically, the sharable node is indexed and appears in the search results, but the shared nodes would not.
The second approach would be to use a custom connector that uses one (or more) other connectors. This is obviously more involved, but it probably would allow you to achieve a behavior closest to what you want.
Hope this helps.
Thanks for that.
Using shared nodes could be a bit clumsy so I'm currently looking at a custom connector and have started writing my first one to learn the technology.