which, as I understand it, makes some data (until 2017?) real without verification.
You understand incorrectly. Firstly, the
assumevalid blocks is updated at every major release, so it is at most a couple of months out of date for the most recent release. For Bitcoin Core 0.18.0, the
assumevalid block is
0x0000000000000000000f1c54590ee18d15ec70e68c8cd4cfbadb1b4f11697eee which is from February of this year.
assumevalid does not just make Bitcoin Core blindly accept blocks without validation. Bitcoin Core will still validate most parts of the block, including Proof of Work, UTXOs, amounts, etc. The only thing that is not validated are scripts because scripts are expensive.
assumevalid just means that all scripts in transactions included in blocks that are ancestors of the
assumevalid block are assumed to be valid.
Since it only assumes this for the ancestors of the
assumevalid block, if there were a large work re-org which removed that block from the blockchain, all scripts would be validated.
So, can we consider Bitcoin nodes safe? If so, why?
Yes, we can. Nodes are still validating other important things like PoW, UTXOs, amounts, etc. The block that is chosen for the
assumevalid block is always one that is several thousand blocks deep at the time the PR is created to update the
assumevalid block, and tens of thousands of blocks deep by the time the release is made. So it is extremely unlikely to be reorged out due to the extremely large amount of work required to do so. Even if it were reorged, Bitcoin Core wouldn't become insecure, it would just be a bit slower.
Furthermore, in order for that block to be updated in the codebase, multiple people need to agree with the change and sign off on it. Many developers do so and go further to PGP sign a message stating that they agree that this block is part of the main Bitcoin chain.
While this does introduce a little bit of trust, people can independently check that that block is part of the main chain be going to block explorers and looking up the block in their own node. They can check that this block and its ancestors are indeed valid.