JFETs and MOSFETs are bad for dynamic range. You get maybe a 2:1 resistance range, for signal voltages under maybe 0.2V peak. Sure, you can make a bridge with regular resistors and take the difference, so that 2:1 range goes 0:1, or -0.5 to +0.5. You can put in a big trimmer to account for manufacturing variation, but you still need to figure out the tempco.
The traditional way to do this is with any of the arithmetical approaches BJTs offer. You can use BJTs (or just regular diodes) with op-amps to build log-exp functions, and do addition/subtraction on the log term to accomplish multiplication. The diodes/BJTs obviously have to be matched by manufacture and temperature; a few monolithic arrays are still available for purposes such as these. You're still left with either a linear tempco (proportional to absolute temperature, due to k_B*T/q) or some power law (due to I_S). A linear tempco at least isn't too bad; you can get pretty close with an RTD, a silicon type probably being ideal, for apparent reasons.
You can also do it kind of all-at-once with a BJT diffamp, which has a tanh(Vin) response, where the "width" of the transfer function is proportional to temperature (k_B*T/q again), and "height" proportional to bias current. The middle of this function, for small inputs (under 30mV or so), is approximately linear, so can be used as a two quadrant multiplier. Traditionally, the collector currents are shuffled around with current mirrors so that they can be subtracted from each other, giving a net bidirectional output current, proportional to input voltage and bias current. Feeding this into a resistor gives voltage again. This circuit is known as an operational transconductance amplifier (OTA), the LM13700 being a good example. The LM13700 is little different than any discrete (or obsolete IC) OTA, the main differences from earlier types being a dual device package, and having linearizing input diodes and optional voltage followers available on chip (just darlington followers, nothing fancy, mind).
You can, of course, build one yourself, but the monolithic chip will have an input offset voltage of a couple milivolts (as good as any op-amp), whereas discrete, you'll be lucky to within 50mV without having to match each and every transistor. It is entertaining to touch your finger to a transistor and watch the output drift by whole volts though.
Aside: I once built a sampled-autozero OTA circuit, so that for a few microseconds every few miliseconds, the amp was switched away from the signal, the input grounded, and the output fed back to a holding capacitor until it read 0V. The resulting error was applied to the OTA's opposite input, so that the offset voltage is taken up by the hold circuit. Amazingly, torturing any transistor with direct soldering heat resulted only in gain drift, but not offset, even up to insane offsets like 0.5V! I also tried germanium transistors, which worked exactly as well (this shouldn't be a surprise: the gain is dependent on absolute temperature, not semiconductor bandgap), though of course when heated above 100C or so, there simply wasn't anything left, as anything germanium looks like a low-ohm resistor by that temperature.
Anyway, this general method can be refined substantially, and you get an analog multiplier chip like the AD633, a four quadrant multiplier good for general purpose analog computing applications. They require a lot of laser trimming (at least, that's my guess), so they aren't very cheap, besides being a fairly low quantity part.
Other less fundamental approaches include PWM of a variable voltage (requires slow filtering, leaves residual ripple), or just giving up and doing it digitally (if the bandwidth is low, a uC could do it for under a buck; if the bandwidth is extreme, a high speed ADC, DAC and FPGA could do it for a couple bucks more). Notice, this includes crude approximations, like using a very simple converter (an 8 or 10 level "flash" converter -- like the LM3914 display driver, which is a 10 bit unary ADC; or the 8-level conversions often used internally in PFC controller chips, being an application of such a method), which though semantically unsatisfying (throwing a wad of comparators and junk at it and hoping a solution falls out..), is often sufficient for the purpose.
If you can reconsider your application, it would be wise to do so. If you can mathematically prove that you necessarily must have some sort of active, two variable multiplication (or division), you'll have to suck it up and use one of these approaches and deal with the side effects (calibration, stability, drift, accuracy, distortion, cost...).
Tim