It seems like you're asking two things. I can't really speak technically about JBU, but I can give an overview of the necessary concepts and bilateral filtering generally. You'll probably need to find more details yourself, but this should give a coherent structure to start from.
Fixing "Image"s
Many image-processing people view filtering as either something to be done as a post-process, or as a way to scale images. The mathematician's perspective is more accurate, descriptive, and complex.
When you have an image file, you don't have a real image. You have pixel "values", which are strictly valid only at the center of pixels. Roughly speaking, each pixel has an area that takes on that color. Mathematically, what you're doing is using a nearest-neighbor reconstruction filter to reconstruct the true image from pixel values. So an "image" is really a set of samples and a reconstruction filter, typically nearest-neighbor.
Resampling
When you upscale an image, what you're really doing is resampling. How do you do this? You take your signal, and generate a new set of samples from it. But for an image, I just said we don't have the real image; we have to reconstruct it first. So a typical resampling procedure looks like this:
- Take your pixel values.
- Reconstruct an image between the values, which live at pixel centers, by using reconstruction filtering.
- Measure a new set of samples from the reconstructed image, possibly spaced differently.
- Throw away the old samples and use the new ones.
The key point is that the reconstruction filter used is the "filter" used for resampling. For example, a "bicubic upsample" would use a bicubic reconstruction filter.
It turns out that if you use a sinc function for the reconstruction filter, and you don't shrink the image, you get (theoretically) the same image back. In fact, if you upscale the image and then downscale it again, you'll get the same answer. This isn't generally true for any other filter.
Most filters approximate a sinc filter to more or lesser degrees. Deviations result in image loss.
Filtering
If you use the same before/after sampling rate, you do something called "filtering". Formally, filtering is resampling without a change in sample rate. Filtering is a special case of resampling.
The only possible purpose to filtering it to throw away information (e.g. a Gaussian) or possibly also to distort or add spurious information (e.g. a Sobel).
Bilateral Filtering
You can use many different filters for filtering. Bilateral filtering is one of them. I don't believe it's considered state-of-the-art for any purpose now (though I don't know what is; probably some newfangled machine-learning thing I expect).
A bilateral filter is a non-linear filter, meaning it doesn't have a nice Fourier representation. Conceptually, it is like a Gaussian, but the source colors themselves also factor into a pixel's "distance" from others. This tends to smooth flat areas while preserving edges.
Bilateral Upscaling
By now, I hope you see where I'm going with this: any filter you can use for filtering, you can use for upscaling or downscaling, which are really the same thing (because all of it is resampling).
If you've implemented a bilateral filter, you should be able to rather simply implement a bilateral filter resampler - just as, if you've implemented a Gaussian filter, you should be able to implement a Gaussian filter resampler.
The only difficulty may be the definitions. Unfortunately, the distinction between filtering and resampling is systemically muddied to occasional non-existence in the image-processing literature. For implementing a bilateral-type filter, I would rely heavily on its similarities to Gaussian resampling. IIRC (I haven't read the paper in years) bilateral filtering is posed in terms of pixels, not samples.