Is the subset of subsets thing just the following:

````patch
diff --git a/pyop2/base.py b/pyop2/base.py
index 0d76eff..b578654 100644
--- a/pyop2/base.py
+++ b/pyop2/base.py
@@ -614,13 +614,17 @@ class Subset(Set):
     """OP2 subset.
 
     :param superset: The superset of the subset.
-    :type superset: ``Set``. (NOTE: Subset of subsets is unsupported)
+    :type superset: a :class:`Set` or a :class:`Subset`.
     :param indices: Elements of the superset that form the subset.
     :type indices: a list of integers, or a numpy array.
     """
     @validate_type(('superset', Set, TypeError),
                    ('indices', (list, np.ndarray), TypeError))
     def __init__(self, superset, indices):
+        if isinstance(superset, Subset):
+            # Unroll indices to point to those in the parent 
+            indices = superset.indices[indices]
+            superset = superset.superset
         self._superset = superset
         self._indices = verify_reshape(indices, np.int32, (len(indices),))
````

That seems to work for me for the following test:
````patch

diff --git a/test/unit/test_subset.py b/test/unit/test_subset.py
index 18b2add..fd767ed 100644
--- a/test/unit/test_subset.py
+++ b/test/unit/test_subset.py
@@ -80,6 +80,23 @@ class TestSubSet:
         op2.par_loop(k, ssodd, d(op2.RW))
         assert (d.data == 1).all()
 
+    def test_direct_loop_sub_subset(self, backend, iterset):
+        indices = np.arange(0, nelems, 2, dtype=np.int)
+        ss = op2.Subset(iterset, indices)
+        indices = np.arange(0, nelems/2, 2, dtype=np.int)
+        sss = op2.Subset(ss, indices)
+
+        d = op2.Dat(iterset ** 1, data=None, dtype=np.uint32)
+        k = op2.Kernel("void inc(unsigned int* v) { *v += 1; }", "inc")
+        op2.par_loop(k, sss, d(op2.RW))
+
+        indices = np.arange(0, nelems, 4, dtype=np.int)
+        ss2 = op2.Subset(iterset, indices)
+        d2 = op2.Dat(iterset ** 1, data=None, dtype=np.uint32)
+        op2.par_loop(k, ss2, d2(op2.RW))
+
+        assert (d.data == d2.data).all()
+
     def test_indirect_loop(self, backend, iterset):
         """Test a indirect ParLoop on a subset"""
         indices = np.array([i for i in range(nelems) if not i % 2], dtype=np.int)
````