Btrfs actually already does this. When you fsync a file the metadata is written to a dedicated logging tree, and that file's data blocks go to disk along with the metadata for the dedicated tree.
The end result is that we only write data and metadata for the one file we're sending to fsync.