Query that always worked now hangs indefinitely
Here's what I'd generally do. I apologize if the indexes are duplicative to what you already have. I started looking at the output you posted, but there was  lot in there that I didn't have time to weed through.

Architecture:

Replace WHERE CLAUSE function dbo.dataSKU with a computed column in xtra_itemmaster and xtra_SKUmaster. I don't mean use the function in a computed column, I mean pull out the code you showed me and put that in one.

You can do that with a case expression like this (not copy and paste-able)

ALTER TABLE dbo.Table ADD [Computed SKU Column Name Here] AS CASE WHEN SKUlite LIKE '%COMP' THEN left(SKUlite, len(SKUlite)-4) ELSE SKUlite END /*PERSISTED if possible*/

That will allow you to index the computed expression, which should make the joins more efficient.

Query:

After adding indexes, play with removing the distinct. You're already grouping by a bunch of columns, so I'm not sure what else you're getting out of this.

Pull out the order by Pprin.product_id unless you really need it.

Replace dbo.deduceMFRfromSubCatName with inline table valued function. I can't do this rewrite, even if you show me the code. 

Indexes I'd like:

xtra_icecat_printers1_rel_carts2
 - (prodid1, prodID2)

xtra_icecat_allproducts
 - (product_id, SKUlite)

xtra_itemmaster
 - ([Computed SKU column], CatID, subCatID)

xtra_SKUmaster
 - ([Computed SKU column], dateCreated, lastUpdated, lastIceCatFetch)

xtra_icecat_allproducts
 - (product_id, category_id) INCLUDE (model_name)

xtra_icecat_productdata
 - (product_id)

Xtra_IceCat_Cats
 - (catID)

Xtra_IceCat_PrinterNameOverride
 - (printerID) INCLUDE (forceName, dateForced)

category
 - (CatID)

subcategory
(SubcatID) INCLUDE (category)

And, as discussed in the comments, replace the ISNULL in the WHERE clause as well.

Hope this helps!