Maybe it can be done by injecting it in di.xml as argument to desired blocks?
Not in di.xml, because this is all about the constructor parameters and since you don't want to create new block classes, this option is dropped.
But you can add arguments via layout XML, like this:
<referenceBlock name="the-block-name">
<arguments>
<argument name="customer_session" xsi:type="object">Magento\Customer\Model\Session</argument>
</arguments>
</referenceBlock>
Now you can reference the session in your template with
$block->getCustomerSession()
Documentation: http://devdocs.magento.com/guides/v2.1/frontend-dev-guide/layouts/xml-instructions.html
However, just because this is possible, it does not mean that it is the best solution. In my opinion, this is the same kind of dependency than using the object manager in the template, it's just hidden well, which makes it even worse.
From the code there is no evidence of the dependency anymore, and the template only works if this argument is passed via layout XML.
A new block class is the better option. But you should not override the original block via DI preferences, but rather change the block type together with the template via layout XML. Now the new template is coupled with the new block type and its dependency to the session is explicit in code.