Lisp Extraction Mission
Common Lisp, 99

The following 99 bytes solution is a CL version of the nice Scheme answer.



(defun g(l n &amp;optional(o'l))(if(eql n l)o(and(consp l)(or(g(car l)n`(car,o))(g(cdr l)n`(cdr,o))))))


I originally tried to make use of position and position-if, but it turned out to be not as compact as I would have liked (209 bytes):

(lambda(L x &amp;aux(p'l))(labels((f(S &amp;aux e)(cons(or(position x S)(position-if(lambda(y)(if(consp y)(setf e(f y))))S)(return-from f()))e)))(dolist(o(print(f L))p)(dotimes(i o)(setf p`(cdr,p)))(setf p`(car,p)))))


Expanded

(lambda
  (l x &amp;aux (p 'l))
  (labels ((f (s &amp;aux e)
             (cons
              (or (position x s)
                  (position-if
                   (lambda (y)
                     (if (consp y)
                         (setf e (f y))))
                   s)
                  (return-from f nil))
              e)))
    (dolist (o (print (f l)) p)
      (dotimes (i o) (setf p `(cdr ,p)))
      (setf p `(car ,p)))))


Example

(funcall *fun* '(4 5 (1 2 (7) 9 (10 8 14))) 14)


The list is quoted, but if you really want, I can use a macro. 
The returned value is[1]:

(CAR (CDR (CDR (CAR (CDR (CDR (CDR (CDR (CAR (CDR (CDR L)))))))))))


For tests, I used to generate a lambda form where l was a variable:

(LAMBDA (#:G854) (CAR (CDR (CDR (CAR (CDR (CDR (CDR (CDR (CAR (CDR (CDR #:G854))))))))))))


Calling this with the original list returns 14.



[1] (caddar (cddddr (caddr l))) would be nice too