Hi all, I think I got it by myself. Here's what I came up with after careful consideration :
1) Any modification to a file that requires its clusters (re)allocation could possibly lead to fragmentation. For this reason, the host level defrag must be the last operation.
2) Unless a virtual disk is pre-allocated, blocks are appended to it as they are requested by the guest OS. This inevitably leads to a "virtual disk fragmentation", in the sense that the disk's blocks are not contiguous (as in a physical disk), but randomly spread across the virtual disk's image file(s). VMware's defrag reorganizes the virtual disk's blocks inside the virtual disk's image file. It does not work at the guest OS's file system level (it should be aware of any file system format used by the guest), nor does it work at the host filesystem level (why should it? there are dozens of utilities that do that). In addition, any guest OS operation that involves allocation of new blocks could possibly lead to virtual disk fragmentation (both in the sense of "blocks inside the virtual disk's image file" and "virtual disk's image file's clusters on the host filesystem"). For this reason, both virtual disk defrag and host level defrag must come after the guest OS defrag.
3) The shrink operation frees up unused virtual disk blocks, releasing them to the host OS. This could lead to: (a) more virtual disk fragmentation, once the guest OS requires more blocks and (b) virtual disk's image file fragmentation. I couldn't determine if the shrink operation performs a virtual disk defrag operation too, but I guess no. But I noticed that the virtual disk defrag operation usually leaves larger virtual disk's image files. So: if one wants to perform both shrink and virtual disk defrag, I guess it's better to do defrag first and then shrink.
That said, my feeling is that defrag operations do not have a great impact on my virtual machines' performances. There must be a measurable difference, but I don't care about benchmarks. Moreover, any performance gain can't compensate the time required for a full defrag (at the three levels: guest, virtual disk, host). So, unless my virtual disks become really badly fragmented, I'll let them grow and care about something else .