Well, this is all kind of like when you go to your doctor and say "Doc! It hurts when I do this!" and he says "So don't do that! Problem solved!".
rsync is for synchronizing directories but, from your description, you don't want to do that. You want to "unsync" two directories: you want the files to be in one, but not both of them.
I take it that you can't modify the code generating the files on the other system since, if you could, you would simply have it run ftp or rcp or curl or some such as soon as the files are finished to push them over to the target machine from the source machine and then delete them.
So working only from the target machine you're best off to just run a periodic job to sign on to the remote machine and copy and delete everything in ~/datadir. It'll save rsync's overhead of comparing the two directories: this being wasted effort since you don't care about the contents of ./localdir - it's always going to get the contents of ~/datadir pulled into it. Using rcp or scp is the simplest but if the only access you have on the remote system is rsync then run that in a cron job.
This will cause a delay between file creation and transport of some few minutes depending on the periodicity of your job since, as you note, rsync doesn't run live. If you need immediate transport you'd have to run a file sharing server such as amule on the other machine but that's a lot of complexity and overhead to save a few minutes and you'd still have to sign on every so often to delete the files: something no file sharing utility is going to do for you.
In all of this there is the lurking gremlin of How do you know you've got complete and uncorrupted files waiting for you on the other end?
If you're just taking things from the directory in which the files are created then any number of things can result in your taking some fraction of a complete file over to your target machine. You could, for example, start the copy (or rsync or whatever) while the file is being written out by the code on the source machine. Or the creating program could just fall over due to some hardware problem, such as a full disk, part way through creation.
So when doing this sort of thing I always have separate creation and transportation directories and then mv (not cp) files after successful creation from the creation to the transportation directory. I'm very paranoid about file corruption too so I always cook my own digest/checksum/manifest file for the source files as well on top of all the automatic low level stuff that guards against corruption.