Seu código está muito bem feito! Você estruturou de forma clara as funções de adicionar produtos ao carrinho, calcular o total e limpar o carrinho, o que mostra que você está entendendo bem os conceitos de manipulação de DOM e lógica de programação.
Gostei bastante da forma como você separou as responsabilidades em funções (adicionar e limpar), isso ajuda muito na organização e reutilização do código.
A lógica de cálculo do subtotal e atualização do total geral está funcionando direitinho!
Uma sugestão que eu faria seria garantir que o valor unitário seja convertido para número antes da multiplicação, usando parseFloat(valorUnit), só para evitar qualquer problema com strings:
let preco = quantidade * parseFloat(valorUnit);
Além disso, você poderia adicionar uma verificação para impedir que o usuário adicione produtos com quantidade zero ou negativa, o que deixaria o sistema mais robusto.
Parabéns pelo seu progresso!