I know this is an old question but I'm currently learning this material myself and I think answering would be good practice for me. Hopefully someone will find it helpful...
First, we can employ Hatcher's 1.36 as you suggest, which is not so difficult to put into practice once we understand the universal cover. In this case, we claim the universal cover is the 4-valent tree, ie the infinite tree in which each vertex has exactly one incoming and outgoing $a$ edge, and one incoming and outgoing $b$ edge, and the incoming and outgoing edges of each type are distinct. (https://en.wikipedia.org/wiki/Cayley_graph#/media/File:Cayley_graph_of_F2.svg)
By the nature of how we've defined the edges, there is a local homeomorphism from this space to our base space. In the case of graphs, a local homeomorphism is equivalent to a covering map. Furthermore, it is a universal cover since it is simply-connected. Now to construct the covering space corresponding to the given subgroup, for $[\gamma], [\gamma'] \in \tilde{X}$, we say $[\gamma] \sim [\gamma']$ if $\gamma(1) = \gamma'(1)$ and $[\gamma \overline{\gamma}'] \in H$. The first property is automatically satisfied in this case since $X$ only has one vertex so any paths $\gamma, \gamma'$ will have $\gamma(1) = \gamma'(1)$. The second condition is just saying that when these paths are traversed as a loop (first $\gamma$ then $\gamma'$ in reverse), the homotopy class of this loop should lie in $H$. In practice, it is enough to identify the loops which correspond to the generators of $H$, hence we identify all $[\gamma]\sim[\gamma']$ such that $[\gamma \overline{\gamma}'] \in \{a^2, b^2, (ab)^4\}$. You can verify that this amounts to identifying the points $[a] \sim [a^{-1}]$, $[b] \sim [b^{-1}]$, and $[(ab)^2] \sim [(ab)^{-2}]$, where $[a]$ refers to the equivalence class represented by the closed loop in $X$ obtained by traversing the edge $a$, and $[a^{-1}]$ refers to traversing this path in reverse. Identifying these points in $\tilde{X}$ yields the covering space:
where single arrows are $a$ edges and double arrows are $b$ edges. It's clear that this is in fact a covering space and its fundamental group is generated by $\{a^2, b^2, (ab)^4\} \subset \left\langle a,b \right\rangle \cong \pi_1(X)$. Alternatively, another way to think about this is by group actions. By Hatcher's 1.39, any normal covering $\hat{X}$ corresponding to this subgroup will satisfy $$G(\hat{X}) \cong \pi(X)/\left\langle a^2, b^2, (ab)^4 \right\rangle = \left\langle a,b | a^2, b^2, (ab)^4 \right\rangle,$$ where $G(\hat{X})$ corresponds to the group of covering space automorphisms (deck transformations) of $\rho: \hat{X} \rightarrow X$. This group acts freely on the fibers $\rho^{-1}(x)$ of the cover, and since $X$ only has one vertex, the group will act freely on the vertices of $\hat{X}$. Moreover, since our subgroup is normal, the cover $\rho: \hat{X} \rightarrow X$ is regular, so the group of deck transformations acts transitively on the vertices of $\hat{X}$. To conclude, since the action is transitive and free, you can convince yourself that the vertices of $\hat{X}$ correspond to the elements of $G(\hat{X})$, and so we can identify $\hat{X}$ with the Cayley graph of $G(\hat{X})$. With $G(\hat{X}) \cong \left\langle a,b | a^2, b^2, (ab)^4 \right\rangle$, the Cayley graph is simple to draw. Notice that this method of obtaining the covering space $\hat{X}$ agrees with the first method!
Best Answer
Let me describe, in words, the method of folds due to Stallings. Pictures would be better, but perhaps you can figure out the pictures from my words.
I'll carry out the construction using your example $H = \langle a^3,ab^3\rangle$, which as it turns out has infinite index, not index 9. (You may have been deceived by the fact that the abelianization of $H$ has index $9$ in the abelianization of $F_{a,b}$)
Let $R$ be a graph with one vertex and two oriented edges labelled $a,b$, representing the free group $F_{a,b}$.
To represent $H = \langle a^3, ab^3 \rangle$, draw a graph $G$ with one vertex and two oriented edges $A,B$. Subdivide $A$ into three oriented edgelets labelled $a,a,a$. Subdivide $B$ into four oriented edgelets labelled $a,b,b,b$. These labellings define a simplicial map $f : G \to R$ taking each $a$ edgelet of $G$ to the $a$-edge of $R$, and similarly for $b$. Notice that $H$ equals the image of the induced map of $f$: $$H = \text{Image}\bigl(\pi_1(G) \xrightarrow{f_*} \pi_1(R) = F_{a,b}\bigr) $$
You might notice: $f : G \to R$ is not locally injective (details below).
The strategy is: simply $G$ and the map $G \xrightarrow{f} R$ until one has a locally injective map.
The simplification step is: "Stallings folds".
In order to explain the first Stallings fold, I'll first explain the non-local-injectivity of $f:G \to R$. At the valence 4 vertex $v \in G$ there are four directions with initial vertex $v$: the initial ends of two $a$-edgelets which I will call "$a$-directions"; the terminal end of one $a$-edgelet which I will call a "$\bar a$-direction"; and the terminal end of one $b$-edgelet which I will call a "$\bar b$-direction". The reason that $f:G \to R$ is not locally injective is because of the two $a$-directions at $v$.
Now we're ready to do the first Stallings fold. Define a quotient map $f_1 : G \to G_1$ by folding: take the two $a$-edgelets of $H_0$ whose initial $a$-directions are located at $v$, and identify those two $a$-edgelets to a single $a$-edgelet of $G_1$. The graph $G_1$ inherits a subdivision into oriented and labelled edgelets from the graph $G$.
By the way that $G_1$ and $f_1$ were constructed, it follows that the map $G \xrightarrow{f} R$ factors as $$G \xrightarrow{f_1} G_1 \xrightarrow{g} R $$
Notice three things:
The map $g : G_1 \to R$ is locally injective and so it shares an important property with covering maps, but it is not a covering map. To correct this, examine each vertex of $G_1$, examine the directions at that vertex, and attach a tree of $a,b$-edges to recover the covering map property.
For instance, $G_1$ has a valence $3$ vertex $w$ with an $a$-direction, a $\bar a$-direction, and a $\bar b$-direction, but it is missing a $b$-direction which accounts for why the covering map property fails at $w$. To correct for this, attach to $w$ a copy of a subtree of the Cayley graph of $F_{a,b}$, namely the subtree which contains the identity vertex of the Cayley graph, and the $b$-direction at the identity vertex, and every embedded path in the Cayley graph that starts with that $b$-direction.
After you have done similar appropriate tree attachements to each vertex of $G_1$, you obtain a covering map to $R$ which represents the subgroup $H$. This covering map has infinite degree, hence $H$ has infinite index.
The general method will usually require more than just one fold, but if you understand this one example you'll probably understand the method in general.