I don't think you can have more than one link layer on a single interface.
In the case of PPPoE, establishing the PPP connection creates another interface, typically called ppp0. Your routing table entry will point to ppp0, not to eth0. When a packet is routed to ppp0, it's actually handed to the local PPPoE software, not transmitted anywhere. But then the PPPoE software produces a new packet which it transmits via eth0.
This is similar to how some VPNs work, by the way. OpenVPN, for example, creates a new interface called either tun0 or tap0, whose "link layer" is the OpenVPN daemon. Send a packet to one of those, and the daemon encrypts it and puts the ciphertext into a new packet, typically plain UDP, addressed to the remote OpenVPN server. That packet goes through the routing process and finds its way to a real interface like eth0.
(Unlike the VPN example, when PPPoE sends a packet over eth0, it doesn't rely on the routing table to route the packet there, because eth0 is not configured with an IP address and packets can't be routed to it. Instead, I think it uses a raw socket to send a custom Ethernet frame, addressed to the PPPoE peer's MAC address, that contains a PPP payload, not an IP payload. RFC 2516 has the details of the protocol.)
route printon windows,routeon linux. – Art Shayderov Jul 18 '12 at 19:39