Short answer: composite queries are difficult because they need to keep the state changes while the query calls are pending and then throw them away when the calls complete. They have properties of both updates and queries. A proper implementation would require creating a multiverse of canisters (where each canister can have multiple copies for in-flight composite query calls).
Currently, DFINITY is not working on implementing compositing query in update context. This may change in future.
Long answer: