The delay is bacause df reports the actual amount of space on the disk, but the delete requests are still in the hard disk's buffers.
To maximise performance, the hard-disk buffers only get committed when the disk is on a low load, when they get full, after a certain amount of time, or when they are explicitly synchronised.
You can see the amount of disk space by passing df the --sync option, which will request an immediate commit of the disk buffers and wait for that request to finish.
You can also mount a device with the sync and dirsync options (set in /etc/fstab before mounting), in order to have the device be accessed synchronously (i.e. buffers committed after every read or write). This is slow.