The RFC 3986 URI: Generic Syntax spec lists a semicolon as a reserved (sub-delim) character:
reserved = gen-delims / sub-delims gen-delims = \":\" / \"/
The intent is clearer if you go back to older versions of the specification:
path_segments = segment *( "/" segment ) segment = *pchar *( ";" param )
Each path segment may include a sequence of parameters, indicated by the semicolon ";" character.
I believe it has its origins in FTP URIs.