Why upscaling loses detail
A kernel computes values between the samples it has. Where a sample was never taken, there is nothing to compute from — and no arrangement of weights changes that.
What a kernel is doing when it goes up
Enlarging a grid means asking for the colour at positions that were never measured. A source pixel is a measurement of the light that fell on one photosite; between two of them there is no measurement at all, only whatever the scene happened to contain. A kernel answers by taking a weighted average of the nearby measurements, and the weights are what distinguishes one kernel from another.
That answer is always a smooth blend of things already known. It follows directly that the output contains no frequency the input did not — the fine texture on a brick, the thread in a fabric, the boundary between two letters that were three pixels apart. Where those things were lost in the original sampling, the new grid describes their absence at higher precision.
The result is not damaged. Nothing is subtracted. It is that the ratio of recorded detail to stored pixels falls, and that ratio is what the eye responds to at a given print size.