It can depend on the library, but clock buffers are usually meant for building the clock tree and have balanced rise/fall times so that there is no duty cycle distortion on the tree. Also, some libraries have clock buffers that have built-in decap. Delay cells usually just have a much larger delay than regular buffers, and can be a larger area as well. All kinds can be used during optimization to meet timing. Some designers prefer to limit clock buffers to the clock tree, just because then you know if you're looking at a clock buffer, you know it's a clock net. Delay cells are typically only used in hold fixing, but that can vary too.