Glad you did post :)
This is going to be a brief ramble because it's late here in the UK, but I'm keen to respond because those are exactly what I'm looking into too.
Re: finding the appropriate display units, `convert-units` in particular has a method `toBest` which attempts to find the best-matching display unit for a quantity. The main problem is that it's unaware of culinary measurements (i.e. tsp as you mention, which could round up to tbsp, etc) at the moment.
I reckon that with a few additions to that project, and a few judicious extra test cases[0] to assert the right behaviour, it'd be possible to get it to perform smart display rounding on culinary measurements too.
Ideally those units would only be rendered by when a 'culinary unit system' is optionally enabled. That'd avoid any backwards-compatibility issues for the library -- and also because most users just want to see milliliters and liters by default I'd imagine.
As a slight aside, `pint` has nice support for alternative unit systems[1]. I'm planning to use `cgs` for storage of ingredient quantities since it's fine-grained.
Anyway - I'm probably thinking faster than a practical design, but if you have any interest, I'm probably going to look into extending `convert-units` for this use case a bit more. If it's possible to create a common library we could both use to ease some of the display work, I'd be really happy to collaborate.
[0] - https://github.com/ben-ng/convert-units/blob/93883046e43b5b0...
[1] - https://pint.readthedocs.io/en/0.9/systems.html