I would like to see some effort to remove the need for having public constructors in the aggregates. I do understand why they are there, but this is a framework that I would guess its mostly used by Domain Driven Design (and CQRS, ES) enthusiasts.
Aggregates have the purpose of protecting some invariants. They are mostly a state machine and controlling its state is hard if instances can be created in an invalid state.
I also know that there might not be another alternative except Reflection, but it would be nice to have the option to choose. This choice could be made by implementing an A or B interface or any other appropriate approach. Performance comparisons could help decision making.
An approach to this problem I saw in another language/framework (and it’s non-conventional), was to serialize the object, manipulate its values in the serialized form, and deserialize. The performance was drastically better than using the Reflection library. Since it was an internal thing nobody needs to know or care about, I thought it was a valid hacky way to achieve acceptable performance + code flexibility.