It seems the reason I can't install npm along with nodejs from
jessie-backports is that nodejs-dev can't be installed because it
depends on a virtual package:
The following packages have unmet dependencies:
nodejs-dev : Depends: libssl1.0-dev (>= 1.0.2) which is a virtual package.
It seems libssl1.0-dev is real package on Stretch but not on Jessie.
Yes, this seems like a bug in the backport. The equivalent of libssl1.0-dev in jessie would just be libssl-dev, I think, so the backport should use this.