I have noticed that they only work for Android 7.0
Correct. The exception is lambda expressions, which the development tools transcode into something that can work on older devices as well.
I hope I read wrong because I do not understand why they do not support Java 8
Java 8 was released in 2014. Android 1.0 was released in 2008. Google does not have a time machine that we are aware of, and so they cannot cause Java 8 to be released six years early. For compatibility reasons, Google does not replace the class library on older devices, and older devices often do not get updates anyway.
As to why it took until 2016 for portions of Java 8 to be available in Android, all anyone can do here is offer opinions (engineering time, legal issues with Oracle, etc.).
Could you do the same apk for Android 7.0 and higher with Java 8 and for lower versions with Java 7?
No. In principle, you could have separate APKs, one using Java 8 and one not, the way that you can have separate APKs for different CPU architectures and stuff. I do not know whether any app distribution channel will support separate APKs by minSdkVersion
.