Если кроссбраузерность не требуется, то можно посмотреть в сторону масок:
www.w3.org/TR/css-masking/#the-mask-image - кладем изображение в виде фона, затемняем его, к координатам мышки привязываем блок с фоном и маской. Для хрома приблизительно вот так:
jsfiddle.net/JkuR9/3
Второй вариант - canvas.