The first method requires adding a disproportionate amount of complexity to the kernel. Pathless shebangs would require either to augment the kernel to access environment variables and process PATH, or to have the kernel execute a userspace program that performs the PATH lookup. The kernel uses the script name in logs.The script itself specifies what interpreter to use, instead of the caller.The caller doesn't have to worry whether a program to execute is a shell script or a native binary.Shebang was added in the kernel for several reasons (summarizing the rationale by Dennis Ritchie: In the first versions of Unix, the shell did the work of invoking itself when it noticed you were invoking a script. The original shebang implementation was just a few lines of code, and it hasn't been significantly expanded since. So you need to put the absolute path in the shebang¹. The kernel does not perform any interpretation on the path in execve (it's up to wrapper functions such as execvp to perform PATH lookup) or in a shebang (which more or less re-routes the execve call internally).
The kernel doesn't see environment variables except when it passes over an environment from the caller of execve to the new process. PATH lookup is a feature of the standard C library in userspace, as are environment variables in general.