HKDF on output key material of previous HKDF I understand the typical way to use HKDF is to make one call to HKDF to obtain multiple keys. Is it safe to use HKDF the following way to generate different keys ? If not, why?

key0 = HKDF-extract-and-expand(0 salt, Z(DH key exchange), x co-ordinates of public points as info).  

key1 = HKDF-expand(key0, info1)
key2 = HKDF-expand(key1, info2)  

Also, is it safe to replace HKDF-expand for key1 and key2 with sp800-108 or HMAC_SHA256(key0, counter)? i'm curious if there are any subtle differences between them that make them not interchangeable ?
It's not necessarily unsafe to create keys that way, but:


the x-coordinates of the public key are already used for calculating Z, so I don't see why inclusion in the KDF makes any difference;
without the x-coordinates, you may as well use HKDF-extract only to derive key0;
key2 is now derived from key1, while it is better to derive them both from key0.


As for point 3, there is no need for the security of key2 to rely on both key0 and key1.

Generally KDF's are interchangeable and even less well studied ones commonly use one-way functions such as hash algorithms with well distributed pseudo random output. However, HKDF comes with 2 advantages:


a more rigorous security proof and;
a split between extract and expand.


It would make sense to use it for those reasons.