Many Optimizely objects implement the IExtendedProperties interface. As an example, the ICart interface implements the IOrderGroup interface, which contains an ICollection<IOrderForm> property, which in turn contains an ICollection<IShipment> property. All four of these interfaces (ICart, IOrderGroup, IOrderForm, and IShipment) implement IExtendedProperties, which contains a property of type Hashtable called Properties.
In other words, all of these already contain the ability to add any number of extra properties. The problem is that the Content API for Cart returns a CartApiModel from the Get endpoints, and the corresponding models to the aforementioned interfaces (ICart = CartApiModel and IShipment = ShipmentModel) do not return the aforementioned Properties property. Of all the Cart-related endpoints, only the Payment ones do (through the PaymentModel).
Please add a List<ExtendedPropertyModel> property to CartApiModel and ShipmentModel, and change the mappers (MapToCartModel for ICart to CartApiModel and MapToShipmentModel for IShipment to ShipmentModel), in the same way that you currently do for mapping IPayment to PaymentModel in MapFormToPaymentModel. For reference, MapToShipmentModel and MapFormToPaymentModel are in in EPiServer.ContentApi.Commerce.Internal.Services.Mapper.cs, while MapToCartModel is in EPiServer.ContentApi.Commerce.Internal.Services.CartService.cs.
And don't stop with just these - ANY object which implements IExtendedProperties should have its model contain the List<ExtendedPropertyModel> property.