My first question is what the precise logical/theoretical reason is that there are only a fixed amount of possible bitcoin addresses.
Because physics doesn't allow us to do anything that is infinite.
But even though there are a finite number of addresses, the number of possible addresses is so large that it might as well be infinite. There's no way that we could exhaust all possible addresses; there's just too many of them.
Secondly, I can generate a bitcoin address by using address(sha256("Passphrase")). If it is even possible to determine, what would be the "Passphrase" in order to calculate the first and last possible address?
That's not how addresses work. It's not an ordered list and addresses aren't generated in any order. Addresses are not generated by hashing some password; nor would they be ordered by that password.
Addresses are generated by hashing a public key with SHA256, then that hash with RIPEMD160. The resulting hash is then encoded with Base58 Check encoding. These hash functions are irreversible so given their output, you cannot find their input. So no, it would not be possible to find out what public key an address is the hash of given just the address.
If you really wanted to order addresses, then the first address is the Base58 check encoding of
0000000000000000000000000000000000000000 and the last address is the Base58 check encoding of
ffffffffffffffffffffffffffffffffffffffff. The range of possible addresses is just the range of all possible 160 bit (20 byte) values. That is because that is the range of all possible values that RIPEMD160 can output.