The problem it solves
An inline SVG is easy to recolour: set fill or use currentColor and you are done. The trouble starts everywhere else.
An SVG loaded through an <img> tag is a separate document, so CSS on your page cannot reach inside it. The same applies to a background-image, an icon in a sprite sheet, a PNG, and any asset from a third party you are not allowed to modify. In all of those the fill is out of reach.
A CSS filter does not care. It operates on the rendered pixels after the element is drawn, so it recolours the icon whatever its source.