I am only going to answer the part of the question about how to improve the results from low-quality filament:
There have already been projects going on dealing with the issue of varying filament diameter. A sensor that detects the filament's diameter and sends its value to the printers firmware can compensate for the varying volume of the filament pushed into the hotend by simply changing the extrusion speed. You could think of an extrusion multiplier or a change in the steps/mm value. Of course this has to be calibrated for the distance the filament needs to travel from measurement to hotend.
A good first read can be found in the following project:
And the corresponding Thing page: