I have made a USB/CAN interface using FT2232H in MPSSE mode (forget UART), MCP2515 and MCP2551. MCP2515 is the key piece you're missing here. Study well what it does. It's the actual CAN controller that does framing, ACKs, checksum generation and verification, message filtering and other less obvious things that a CAN node is required to do by the standard. If you want a sniffer, MCP2515 has a listen only mode which guarantees no transmissions on the bus. MCP2551 is simply a dumb physical layer adapter, similar to a MAX232 for RS-232 or ADM485 for RS-485.
Now this architecture is far from perfect as FTDI MPSSE technology has essentially no support for interrupts (I believe it only uses bulk USB transfers behind the scenes), so I have to poll the controller frequently for new messages. This places a lot of load on the USB host controller but still doesn't guarantee that no messages are lost (MCP2515 can store up to 2 received messages internally if you enable "overflow mode", only one if you don't). A far better solution would be a proper microcontroller with builtin CAN and USB peripherals such as STM32F105 (103 can't use USB and CAN at the same time). See this project for a working implementation of exactly this idea. LPC18xx as suggested by stevenh will work too, but LPC17xx are probably cheaper and easier to find.