I am an expert in this field, but I don't see why not as long as you have a small flat surface at the other end to reflect the signals. However, I don't see the advantage of using them over a simple switch!
I find the switch to be much cheaper, easier to diagnose and more flexible when your motor overshoots for some reason.
But I am not an expert so I might be missing something here.
A latecomer to this thread but it rang a bell for me. It took me a while to realise that the reason for the three end stop switches on the i3 printer was not primarily to prevent over-run - if it were then surely there would be end stops on both ends of travel? No, it is a simple matter of ensuring that X0, Y0 and Z0 are found consistently when the home command is given. Simple and reliable. No need for complex proximity devices.
A friend makes interactive displays for a children's museum and found that some of the snap action switches he was using were unreliable. He built a device to test such switches so he could figure out which brands were going to work for a long time and which were going to fail. See: [rasterweb.net]
I have used mostly snap-action switches for endstops but occasionally use optical interruptors. I suspect the opto interruptors are the most reliable in the long term, but quality snap switches work fine, too. They aren't likely to experience millions of cycles as end stops in a 3D printer.
My latest z=0 switch design uses a lever and cam to allow finer adjustment of the zero position. In previous designs, using a 32 TPI screw to bump the switch directly, one full turn of the screw would move the bed 800 um. Making fine adjustments with that coarse thread was difficult. The lever and cam reduce the sensitivity so that a full turn of the screw moves the bed about 100 um. The lever pivots on a bearing taken from a HDD so the result is very high precision.