There, I broke it (with scissors)
JavaScript (ES6), 81 80 bytes
Takes input in currying syntax (modify)(modifier).

s=&gt;g=([c,...a],d=i=0,x=s[k=parseInt(c,36),i+=c?d&amp;&amp;(k-d+26)%26:1])=&gt;x?x+g(a,k):''

Try it online!
Commented
s =&gt;                       // outer function, taking the string s to modify
  g = (                    // recursive inner function g(), taking:
    [c, ...a],             //   c = current modifier character; a[] = remaining characters
    d = i = 0,             //   d = code of previous modifier character; i = pointer in s
    x = s[                 //   x = i-th character of s
      k = parseInt(c, 36), //     k = code of the current modifier character in [10..35]
      i += c ?             //     update i; if c is defined:
        d &amp;&amp;               //       if d = 0, let i unchanged
        (k - d + 26) % 26  //       otherwise, add the difference between k and d (mod 26)
      :                    //     else:
        1                  //       just pick the next character by adding 1
    ]                      //   end of character lookup in s
  ) =&gt;                     //
    x ?                    // if x is defined:
      x + g(a, k)          //   append x and do a recursive call to g()
    :                      // else:
      ''                   //   stop recursion