To draw the crossings, however, he needs to pick a projection and project both C and the state boundaries, which I guess is why he included some PROJ.4 calls.
The standard solution for this is to put lots of little points into the state GIS definition, so that the points get transformed correctly. That way short line segments don't differ by more than a few meters. That means you have to watch out for simplified state representations, but not much else, unless you're being a stickler.
To be clear, they mean that you keep going in the same compass direction.
If you kept going in the direction which seemed straight ahead to you there on the ground, then what you'd get (under suitably idealized conditions) is a great circle.
This is complicated slightly when there isn't a unique shortest path between any given two points (e.g. the earth's north and south poles), leading to definitions of strongly convex, convex and weakly convex. See http://en.wikipedia.org/wiki/Geodesic_convexity and the debate at http://en.wikipedia.org/wiki/Talk:Geodesic_convexity#Dispute...
That's just the shape of TN's border. It's not a straight line in any coordinate system. (For example, have a look at google maps, which is in geographic. The northern border of the state roughly follows a parallel, but the details are more complicated due to history and local politics.)
I didn't look at the code in detail (and my R is quite rusty), but the fact that he's using the geosphere package suggests that the intersection calculation is being done on a spherical shell, rather than cartesian space.
I bet I could propose a coordinate system in which it was a straight line. ;)