CAN bus voltage level at 12 V
It depends on which parts of the CAN standard you want to adhere to.  The nominal 2.5 V with 900 mV excursions is one part of the standard and is commonly used.  There are off the shelf bus transceiver chips, like the MCP2551, that adhere to this standard.

However, you can make your own bus transceiver that uses whatever voltage levels you like, and still adhere to the logical and protocol parts of the standard.  This still allows using the built-in CAN hardware in many microcontrollers.  These usually have separate transmit and receive lines.  Chips like the MCP2551 convert between that and the common 2.5 V differential CAN bus.

You could, for example, use RS-485 transceivers.  That would give you a differential 0 to 5 V signal.  You can implement your CAN bus as a open collector line.  You can also create your own transceiver where the differential lines go from 0 to 12 V.  If you do any of these things, though, don't expect off the shelf CAN devices to be able to connect directly.

Keep in mind that the 900 mV excursions of the standard CAN bus was chosen for a reason.  The 120 &Omega; terminating resistors at each end are intended to match the typical impedance of a twisted pair.  Otherwise, the 900 mV each line is supposed to be pulled from quiescent when the line is in dominant state is a tradeoff between noise immunity and current required against the 60 &Omega; impedance seen when driving the bus.  In my experience, the noise immunity is quite good with that scheme.  It is also routinely used in a cars, which are electrically very noisy.  The car companies wouldn't be using this scheme if they didn't think it was sufficiently reliable.