PHP type-hinting is not specifically bound to the dependency injection, it's just a PHP feature which allows it thanks to API reflection.
There is at least 1 thing you can't do except via constructor: the contextual binding.
And another one which can't be done via constructor: partial resolution (i.e. app(Test::class, ['arg2' => 'test'])
Also notice that dependency injection can work on every method, not only constructor (e.g. app()->call([$this, 'injectedMethod'])
)
Finally, you should read this doc which explains very clearly everything the container is able to.
https://gist.github.com/davejamesmiller/bd857d9b0ac895df7604dd2e63b23afe