First of all, a production-level full-system calibration usually takes care of it. So, whenever I see such questions, I first think that you shouldn't care about any of it, since those are static errors. So this may be a case of an XY problem, where you think that you need high static accuracy without calibration, but you actually should think about calibration instead.
It's always a tradeoff. You get accuracy out of such circuits by:
Paying money for components: use low tempco, low tolerance components, good enough to eliminate trimming.
Paying money for your time: perform a system calibration of the sensor, and trim the gain/zero.
Include a self-calibration source in the circuit, and have the MCU use it on start-up to self-test and calibrate the system.
You'll still need an end-of-production-line test for this system, so you might as well do it using calibration standards of the accuracy you need, and get calibration for the price of the test you're doing anyway.
If a self-calibration source is included in the design, then the built-in self-test can be used as a part of the final production test.
Paying more money for components doesn't usually absolve you from testing, at least for small production runs, so at least low tolerances aren't helpful from that point since you can calibrate "for free". Low tempco may be of advantage if the application warrants it.
Also, in this particular case, a self-calibration circuit could potentially cost more than a better shunt, so there's not much point to it. The op-amp offset can be calibrated out trivially by ensuring a no-current condition and taking a zero reference reading.
Most of this assumes that you're using an ADC and an MCU as the signal sink within the product. If the outputs are analog, then you can do trimming in several ways:
Use an ADC-MCU-DAC and trim gain and offset in software.
Use non-volatile digital potentiometers controlled from an external calibration fixture to adjust a purely analog signal chain.
Use electromechanical potentiometers controlled by RC servos with spring-loaded self-centering "screwdriver" attachments, controlled by an external calibration fixture.
Tweak the electromechanical potentiometers manually during calibration.
Connect potentiometers in parallel to fixed resistors that set zero offset and gain during calibration, calibrate, disconnect potentiometers, then solder a selected parallel fixed resistor of the same value where the potentiometer was previously connected. For purely analog trimming, this has the highest reliability and lowest drift and noise.
Everything above deals with static errors.
Dynamic errors would be caused by the voltage coefficient of the shunt, and by the non-negligible tempco of the shunt - since all other tempcos can be fairly easily made negiligible in comparison.
In high quality solid metal shunts that aren't overstressed, the voltage coefficient- and resistance-vs-temperature curves are quite constant over time and usually similar or same between units. The calibration would use the shunt temperature and shunt voltage to apply a gain and offset correction. This can be done in purely analog domain using a diode-network function generator, or digitally using a suitable numerical model.
A hybrid approach is also possible, where an MCU measures the shunt temperature and voltage for the purposes of dynamic error correction only and changes digital potentiometer or DAC outputs to add compensating factors into an otherwise analog signal chain.