Update:
load-theme-buffer-local.el (GitHub repository) is supposed to do what I tried to do, but do it the right way.
To use it with eww, install it and add
(add-hook 'eww-mode-hook
(lambda () (load-theme-buffer-local 'tango (current-buffer))))
to your init file.
PS: I cannot test this approach myself, so let me know if this works.
Original answer (kept just for the record):
You can use face-remap-add-relative to set faces in the current buffer.
After a little bit of digging around I came up with this hack. It extracts face settings from a theme and applies them in the current buffer.
(defun set-theme-faces-in-buffer (theme)
"Use face remapping to set faces from a theme in the current
buffer. THEME should be a symbol."
(dolist (setting (get theme 'theme-settings))
(when (eq (car setting) 'theme-face)
(let ((face (nth 1 setting))
(spec (cadar (nth 3 setting))))
(ignore-errors
(apply #'face-remap-add-relative face spec))))))
You can combine this with an eww-mode-hook to set a different theme in eww buffers.
(add-hook 'eww-mode-hook
(lambda () (set-theme-faces-in-buffer 'tango)))
(Replace tango with your favorite light theme.)