OK guys, I finally found what the issue is, or at least kind of where it's coming from.
As some of you (and myself) suspected, my hot end is not reaching the reported temperature. I previously blamed the low readings on my IR thermometer on not being able to point the laser directly at the hotend, but it seems it was reporting accurate readings (around 95C when klipper reports 200C).
Now, here's where things get a little weird. At this point, I've used multiple thermistors, but swapped in a new one anyways. My board also has a pin for a second extruder thermistor, so I plugged it in to that one and changed the pin in my printer.cfg. No change.
I tried switching the bed and hot end thermistors on the board and in printer.cfg, no change.
I changed the thermistor "sensor type" from "EPCOS 100K B57560G104F" (same as the bed) to "Generic 3950", no change.
I found an article about tuning your pullup_resistance value. My cfg file did not have this value specified, so I added a line and started with the default of 4700, which made no difference (I'm assuming this value is loaded from the sensor type by default?). I toyed with the values until my thermometer read ~220C when setting the printer to that temp. However, to achieve this I had to adjust the pullup_resistance from 4700 to 13k+ (far beyond what should be needed) which makes klipper report 6C at room temp (print bed reports 27C). Unsurprisingly, I can hand-feed all the filament I want, but the temp reading is only now only accurate at 220C rather than only being accurate at room temp.
The thermistor, I feel, can be removed from the suspect list, as multiple thermistors exhibit identical properties.
I also feel the motherboard can be removed as well; there are three pins for thermistors, all three show accurate readings for the bed but identically inaccurate readings for the nozzle.
This only leaves software/ firmware, which I find incredibly odd for three reasons. For one, the printer was not even shut off in between "working" and "not working"; I successfully completed a print, and without shutting down, updating any configs, changing any settings etc., I swapped out the nozzle, and the printer hasn't worked since. Second, both the bed and nozzle thermistor are configured exactly the same, so if the nozzle is not set up properly the bed should be wrong too. Finally, Klipper is really straightforward and it's easy to configure things that commonly need configuring, it doesn't seem right that a configuration got changed and I'm completely incapable of finding what happened and fixing it.
As a Temporary Fix^TM^, I'm inclined to get a nice reliable probe thermometer, calibrate a pullup resistance value for common print temps, then updating my cfg whenever I want to change temps more than ~5c. This is obviously not even close to an ideal solution, but I don't know what else to try. Everyone else I've seen with this issue has resolved it either through hardware replacement or fixing settings, and I've tried all I can with both.
I see; though, a thermistor not making good contact with the heat block would imply the heat block is hotter than reported, not the other way around.
This glass thermistors are a nightmare. I kept accidentally ripping the leads off mine. During this whole debacle, I treated myself to a fancy thermistor that is built into the end of an M3 bolt - it screws in to the hole meant for the grub screw that normally keeps the glass ones in place.