Estou assumindo 192.168.0.1 não é o gateway usado no roteador B, mas sim o seu próprio IP na interface LAN. Se o roteador A está fornecendo endereços através do DHCP, ele também está informando B de qual gateway usar, e isso deve ser 192.168.1.1. Se você pode acessar a internet da sub-rede de B, este é o caso, a menos que você tenha uma configuração muito excitante que precise de uma explicação muito mais detalhada.
Para responder à sua pergunta, as máquinas C e D estão em redes separadas, mas D pode iniciar uma conexão com C bem. Ele não consegue encontrar o IP 192.168.1.3 em sua própria sub-rede, portanto, ele passa a solicitação para seu gateway, ou seja, o roteador B, que sabe onde a máquina de destino está localizada.
O inverso é mais difícil. Nem o próprio host D nem seu gateway, o roteador A, sabe que o tráfego destinado a 192.168.0.199 deve atravessar o roteador B. Mesmo se o fizesse, por exemplo, definindo uma rota '192.168.0.0/24 através de 192.168.1.2', o roteador B não permitiria que os pacotes passassem de sua interface WAN para a interface LAN.
Embora seja melhor usar o B como um switch 'burro' em vez de um roteador simplesmente conectando tudo às suas portas LAN, é possível contornar esse problema sem alterar a topologia da rede. Você precisará encaminhar as portas no roteador B que são usadas na comunicação originada fora da rede 192.168.0.0/24.
Por exemplo, se a máquina D estiver executando um servidor da Web, para o qual a comunicação deve ser iniciada a partir da máquina C, você desejará configurar o roteador B para encaminhar a porta 80 em direção a 192.168.0.199. Como alternativa, se o seu roteador suportar esse recurso, você poderá colocar a máquina D na DMZ do roteador B, encaminhando todas as portas para essa máquina, a menos que elas estejam configuradas de outra forma. Normalmente, isso pode ser considerado inseguro, mas, neste caso, a máquina ainda estará protegida pelo roteador A, a menos que a rede 192.168.1.0/24 esteja comprometida.