I'm not Mew, and I can guarantee Mew knows more than I on this matter
but personally, I would just derive my own furnace from BlockFurnace, then derive my own tile entity from TileEntityFurnace...
in my new class for the "MyBlockFurnace" i'd simply add an override onBlockActivated to point the gui to "MyTileEntityFurnace"
and in "MyTileEntityFurnace" i'd simply add an override for canSmelt() and check in there if the itemstack in the furnace is in a list/array of those I want to allow....
... I'm not saying this is correct I'm certainly not saying it's the most efficient way - I'm just saying that I'd probably try that way myself first...
Mew will hopefully point out the stupidity of this, or say "actually that'll work" - i hope for the latter, i expect the former
[ and if i was at home, i'd have tried this before posting it, but i'm not, so i haven't ]