Actually, you have two questions which probably should be treated separately. Let's first have a look to the second one, because it is easier to answer:
But at this point I would also expect that lsyncd will detect that folder ~/B is missing a just deleted file and will sync the folders again by copying the missing file from ~/A to ~/B like it does immediately when it is started!
With your configuration, you can't expect immediate reaction when a file is deleted at the target. lsyncd uses inotify to watch for changes in the source file tree. Actually, after the initial synchronization which happens upon starting, it doesn't know what happens at the target. Instead, from time to time (see below), it calls rsync to reflect the changes in the source tree to the target.
Theoretically, lsyncd could monitor the target via inotify as well as long as the target is local. But usually this is not the case. Let's suppose the target is on a remote host (in contrast to your example). How could lsyncd be notified then about a file in the remote target being deleted?
This is not a problem, though: The next time lsyncd starts a new synchronization (by executing rsync), the file will be created again. That is, while there is no immediate reaction to a file being deleted on the target, that file will be copied again in the next rsync run. The next rsync run happens after a certain number of changes in the source tree (see below) or upon startup.
Please note that you can configure how often lsyncd runs the synchronization via rsync. As far as I have understood, there is a default timeout, but additionally, if lsyncd notices 1000 (default value) changes in the source tree (via inotify), then (regardless of the timeout) it runs rsync to synchronize all of them at once. Of course, this is by far better than running rsync after every single change.
So, coming to your final question ("How can this be done"), it can't be done at all, or requires some programming. In every case, you would have to run a daemon which watches for file system changes on the target and then on its own executes rsync to sync the files from the source to the target, or which in case of such changes notifies another daemon at the source which in turn runs rsync.
But then you wouldn't need lsyncd any more, because with that knowledge you probably would build your own two-way synchronization system.
Now let's get to your first problem:
According to my configuration file I would expect that if I delete a file in ~/B, it will not be deleted from ~/A which is also the case!
I am not able to tell immediately what is going wrong here; it really shouldn't happen given your configuration. However, I have a suggestion regarding further analysis:
When starting lsyncd, add the parameter -log Exec. Your command line then would read:
lsyncd -log Exec -nodaemon ~/.config/lsyncd/lsyncd.conf
This will log the command lines of all processes lsyncd spawns (in your case, to the terminal). I am very confident that we can identify the problem when you post those command lines (preferably, as an update in your original question); they should show how rsync is executed, including the command line parameters. Perhaps I can help with analysis, but to be honest, I am not that deep in rsync.