That is the whole point of a modport - they define a subset signals that become ports of the module. The signals that are not part of the modport do not get connected and thus you have no access to them. Once defined, odports are only referenced in the port connection.
modport sub1(input a, output c);
module my_mod(my_intf.sub1 p); // this is effectively replaced with input p.a, output p.c
p.c <= p.b; // this will be a compilation error - no access to p.b
my_mod m1(i1.sub1); // this is effectively replaced with i1.a, i1.c