1) I don't really see a problem with creating a minimum of two groups - one for internal and one for external. I've actually never tried to configure two neighbors under the same group with one neighbor internal and one external, but it can probably be done. You can set any group-level parameters at the neighbor level if you want.
2) The Juniper policy, IMO, is much more scalable and powerful than IOS (IOS-XE, I'm told, is a different animal). What you are asking can be done one of several ways, depending on what you want to achieve. If all you want is to be able to nail up a route, you can configure a static route with a discard next-hop and export that static with an export policy:
routing-options {
static {
route 192.168.1.0/24 discard;
}
}
policy-options {
policy-statement bgp-policy {
term 1-export_route {
from {
protocol static;
route-filter 192.168.1.0/24 exact;
}
then accept;
}
}
}
protocols {
bgp {
group ebgp {
export bgp-policy;
}
}
}
Bear in mind that this is just the minimum of what you could use to advertise the route. It would behoove you to read through the docs on routing policy:
https://www.juniper.net/documentation/en_US/junos12.3/information-products/pathway-pages/config-guide-policy/config-guide-policy.html
You can take one or many actions on that route prior to exporting it to BGP - set communities, change as-path, push it to a different policy to take further action, set origin, etc. You will get used to it once you find how powerful the routing policy is in Junos.
The only really annoying thing about Juniper BGP configuration that I've found in the 12+ years I've been working with Juniper is the lack of an equivalent "shutdown" command for individual BGP neighbors.